4

这显然是 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.

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

4

2 回答 2

2

同样,我不建议这样做。但是,您可以将 更改,为 a 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
于 2013-04-25T15:32:45.150 回答
1

这段代码:

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和一个内部连接的结果bcc无法访问 中的任何字段,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
于 2013-04-25T15:18:15.383 回答