2013-07-30 17 views
0

我有3个表A,B,C。表A和C之间存在关系,而表B和C之间存在关系。 A和B之间没有关系。SQL Server需要一些帮助加入,请

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

请让我知道,如果这是不够的 感谢

明确

回答

0

简单的数学规定,如果有A和C之间的关系,B和C之间的关系,有,尽管由协会,A和B之间的关系(通过C)。

因此,你需要将所有三个连接在一起,从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 
+0

这是真的..但我没有得到任何记录B。我期望有一些值出现,因为我只是在给定上面的语句的情况下搜索B中没有任何对应值的值。 – user1100401

+0

如果所有三个表中都存在相应的记录,那么只有您选择了该记录,因为您已经提到“我真正想要做的是从C中获取所有记录的列表,当C中有记录时与B相关的值赋予了A的值。“ –

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,那么你需要改变查询有点像这样一些事情复式值...

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

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