需要查询帮助(使用连接)

时间:2009-03-06 18:59:58

标签: sql-server tsql

我有三张桌子:

支票簿表保存了我需要的东西 收据表包含指向所有者表的链接
所有者表知道它链接到哪个支票簿

只有当收据中有行链接到(通过所有者表格)时,我才需要获取支票簿。 我不确切知道如何做到这一点,它似乎有点循环。这就是我尝试过的:

SELECT chk.ID, chk.Description FROM tblCheckbook chk
LEFT JOIN tblOwner o
ON r.OwnerID = o.ID
INNER JOIN tblCashReceipts r
ON chk.ID = o.CheckbookID

但是sql server抱怨“无法绑定多部分标识符”r.OwnerID“。”
我需要做些什么才能让它发挥作用?

4 个答案:

答案 0 :(得分:2)

在执行LEFT JOIN时,尚未遇到r(tblCashReceipts)的定义。你可能想要这样的东西:

SELECT chk.ID, chk.Description FROM tblCheckbook chk
LEFT JOIN tblOwner o
ON chk.ID = o.CheckbookID
INNER JOIN tblCashReceipts r
ON o.ID = r.OwnerID

答案 1 :(得分:1)

每个联接都有一个描述关系的on子句。你只需要使用正确的连接来建立关系。

在此处使用左连接没有意义,因为您在第二步中使用内连接。这只会导致数据库使用更大的集合来获得相同的结果。

select c.ID, c.Description
from tblCheckBook c
inner join tlbOwner o on o.CheckbookID = c.ID
inner join tblCashReceipts r on r.OwnerID = o.ID

答案 2 :(得分:1)

我认为你几乎就在那里,你只需要改变你的连接条件。试试这个:

SELECT chk.ID, chk.Description FROM tblCheckbook chk
LEFT JOIN tblOwner o ON o.CheckbookID = chk.ID 
INNER JOIN tblCashReceipts r ON r.OwnerID = o.ID 

或者:

SELECT chk.ID, chk.Description FROM tblCheckbook chk
LEFT JOIN tblOwner o ON o.CheckbookID = chk.ID 
LEFT JOIN tblCashReceipts r ON r.OwnerID = o.ID 
WHERE r.OwnerID IS NOT NULL 

那么,如果同一所有者有多个收据,那会是什么?使用此查询,您将返回每个收据的支票簿,这可能是您想要的,但听起来不像它。您可能也想在那里抛出DISTINCT。

答案 3 :(得分:0)

收据是否知道他们所属的支票簿?

通过收据表加入支票簿。

所有者 - >收据 - >支票簿