从多个表中选择数据

时间:2013-12-31 14:35:36

标签: sql sql-server

我有以下内容:

  

表1 IdTable1,IdTable2,IdTable3
  表2 IdTable2,标题
  表3 IdTable3,FName,LName

我需要Table1的内容与Title,FName,LName

我试过了

SELECT T2.Title, T3.FName, T3.LName  
FROM Table1 T1  
LEFT JOIN Table2 T2 ON T1.IdTable2 = T2.IdTable2  
LEFT JOIN Table3 T3 ON T1.IdTable3 = T3.IdTable3  

我得到的只是Table2,其他列为NULL或Table3的2列,第一列为NULL。

表1包含
1 2 1
2 2 1
3 2 5

表2包含
1先生 2夫人

表3包含
1 A B
2 C D
3 E F
4 G H
5 I J

我所有查询的结果都是
Null Null夫人
Null Null夫人
Null Null夫人

NULL A B
NULL A B
NULL I J

2 个答案:

答案 0 :(得分:1)

只要您想返回部分结果,您的SQL就可以了。

您确认实际数据是否正确?您正在使用LEFT JOIN。这意味着即使T2或T3中没有匹配的数据,也会返回T1中的行。如果其中一个表中没有匹配的行,则该表中的列将为NULL。

如果在结果集中包含T1中的所有列,您将看到T1中确实存在数据,但T2或T3中没有匹配的数据。在T3列为NULL的情况下,这意味着T1和T2中存在数据但不存在T3。

在我看来,你有一个参照完整性问题。您可能需要在创建或删除记录时添加带有删除约束的外键或修复某些应用程序逻辑问题。

答案 1 :(得分:0)

我猜你的Table1是Table2和Table3的数据透视表。我会做类似下面的事情。

SELECT T2.Title, T3.FName, T3.LName
       FROM Table1 T1, Table2 T2, Table3 T3 WHERE T2.IdTable2 = T1.IdTable2 and T3.IdTable3 = T1.IdTable3