我有三张桌子:
支票簿表保存了我需要的东西
收据表包含指向所有者表的链接
所有者表知道它链接到哪个支票簿
只有当收据中有行链接到(通过所有者表格)时,我才需要获取支票簿。 我不确切知道如何做到这一点,它似乎有点循环。这就是我尝试过的:
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“。”
我需要做些什么才能让它发挥作用?
答案 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)
收据是否知道他们所属的支票簿?
通过收据表加入支票簿。
所有者 - >收据 - >支票簿