繁体   English   中英

如何在SQL select语句中使用以逗号分隔的表列表时如何执行连接?

[英]How can you perform a join when also using a comma-separated list of tables in an SQL select statement?

这在SQL Server中显然是正确的语法:

SELECT a.id, b.name
FROM Table1 a, Table2 b
WHERE a.id = b.fk1

这是这样的:

SELECT a.id, c.status
FROM Table1 a
JOIN Table3 c ON a.id = c.fk2

但这显然不是:

SELECT a.id, b.name, c.status
FROM Table1 a, Table2 b
JOIN Table3 c ON a.id = c.fk2
WHERE a.id = b.fk1

我通常不想在第三种情况下构建一个查询(并且实际上也不是第一种情况),但它可能是编辑已经在我公司编写的一些代码时最不具有抵抗力的路径。 有人使用了第一个表格和五个不同的表格,我真的需要通过JOIN语句在第六个表格中工作,而不会弄乱他们已经拥有的东西。 即使我可以在需要的时候彻底重写他们的东西,我真的很想知道如何做第三种情况。

在示例中完全按原样运行代码,第三种情况给出了以下错误消息:

The multi-part identifier "a.id" could not be bound.

什么在语法上破坏了第三种情况? 可以应用什么简单的修复? 谢谢!

同样,我也不建议这样做。 但是,你可以改变的,一个cross join

SELECT a.id, b.name, c.status
FROM Table1 a cross join Table2 b
JOIN Table3 c ON a.id = c.fk2
WHERE a.id = b.fk1

这段代码:

SELECT a.id, b.name, c.status
FROM Table1 a, Table2 b
JOIN Table3 c ON a.id = c.fk2
WHERE a.id = b.fk1

是做在一个交叉联接a和内的结果上加入bc c不能访问的任何字段中a ,因为联接被执行时b 你应该做的是将你的查询更改为:

SELECT a.id, b.name, c.status
FROM Table1 a
     inner join Table2 b on a.id = b.fk1
     inner JOIN Table3 c ON a.id = c.fk2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM