请SQL Server需要一些帮助加入

时间:2013-07-30 08:26:53

标签: sql sql-server-2008 sql-server-2008-r2

我有3个表A,B,C。表A和表C之间存在关系,而表B和C之间存在关系。 A和B之间没有关系。

我真正想要做的是从B中获得B的所有记录的列表,当C中有与B相关的记录时给出A的值。

如果不够清楚,请告诉我 感谢

2 个答案:

答案 0 :(得分:1)

你可以直接查询这样的东西......

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的mutliple值,那么你需要更改一些查询,比如这个......

WHERE A.cc IN (@val1,@val2,@val3....,@valNth)

在这个查询中我们使用了INNER JOIN,因此它只会给出两个表LIKE上常见的记录,如果你只用C加入B那么它会给出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

答案 1 :(得分:0)

简单的数学决定了A和C之间是否存在关系,以及B和C之间是否存在关系,,虽然是关联,但是A和B之间的关系(通过C)。 / p>

因此,您需要将所有三个一起加入,从A到C,再到B:

SELECT B.*
FROM A
JOIN C ON A.x = C.x
JOIN B ON B.y = C.y
WHERE A.z = @z