我有 3 个表 A、B、C。表 A 和 C 之间存在关系,而表 B 和 C 之间存在关系。A和B之间没有任何关系。
我真正想做的是从 B 中获取所有记录的列表,当 C 中有与 B 相关的记录时,给定 A 的值。
请让我知道,如果这还不够清楚谢谢
我有 3 个表 A、B、C。表 A 和 C 之间存在关系,而表 B 和 C 之间存在关系。A和B之间没有任何关系。
我真正想做的是从 B 中获取所有记录的列表,当 C 中有与 B 相关的记录时,给定 A 的值。
请让我知道,如果这还不够清楚谢谢
您可以正确查询这样的内容...
SELECT B.* FROM B
INNER JOIN C ON C.aa = B.aa
INNER JOIN A ON A.bb = C.bb
WHERE A.cc = @yourvalue
@yourvalue 是您需要从 B 表中选择值的基础的值。如果您需要匹配 A 中的多个值,那么您需要更改一些查询,如下所示...
WHERE A.cc IN (@val1,@val2,@val3....,@valNth)
在此查询中,我们使用了 INNER JOIN,因此它只会给出两个表上共有的记录,如果你只将 B 与 C 连接起来,那么它将给出 B 和 C 中常见的记录,然后你将 A 与 C 连接起来然后它将给出在 A 和 C 中常见的那些记录。
所以假设在 B 中有类似 1,2,3 的记录,在 C 中有 2,3,4,5,在 A 中有 1,3,4,5
所以上述查询的输出(不应用 WHERE 原因)只是 1,3,因为这在所有三个表 A、B、C 中都很常见。
您可以通过参考此链接获得有关 sqlserver 中联接的更多信息。
http://blog.sqlauthority.com/2009/04/13/sql-server-introduction-to-joins-basic-of-joins/
http://www.dotnet-tricks.com/Tutorial/sqlserver/W1aI140312-Different-Types-of-SQL-Joins.html
http://www.aspdotnet-suresh.com/2011/12/different-types-of-joins-in-sql-server.html
Simple math dictates if there is a relationship between A and C, and a relationship between B and C, there is, albeit by association, a relationship between A and B (through C).
Thus you will need to join all three together, going from A, through C, to B:
SELECT B.*
FROM A
JOIN C ON A.x = C.x
JOIN B ON B.y = C.y
WHERE A.z = @z