在SQL中使用LEFT OUTER JOIN的问题

时间:2013-12-18 16:28:47

标签: sql-server tsql

我正在尝试显示Table_A中的所有数据,并且只显示表格右侧的Table_B匹配位置。我有2个这样的表: TABLE_A:

ID   FAC_ID    QUESTION      ACTION_ITEM
1      222       what?        do...
5      245       when?        make..
9      325        vcc          kjy
11     145        kne          juy

表-B:

ID   FAC_ID    QUESTION      ACTION
5      245       when?        make..

当我运行我的sql语句时,我想显示如下内容:

ID   FAC_ID    QUESTION      ACTION_ITEM
1               what?         do...
5      245       when?        make..
9                vcc          kjy
11               kne          juy

但是使用我的代码,它只显示ID = 5的一行数据。这是我的代码:

select A.ID, B.FAC_ID, A.QUESTION, A.ACTION_ITEM
 FROM TABLE_A A LEFT JOIN 
 TABLE_B B ON A.ID=B.ID
 WHERE FAC_ID = 245

3 个答案:

答案 0 :(得分:1)

您正在WHERE子句中引用表B中的列。将其移至JOIN。

实际上,您发布的示例甚至不会编译,因为FAC_ID不明确。

答案 1 :(得分:0)

您的查询没有任何意义 - 您的where子句会根据您的数据将其限制为一行,其中ID = 5.

我想你可能需要:

 SELECT A.ID, B.FAC_ID, A.QUESTION, A.ACTION_ITEM
 FROM TABLE_A A 
 LEFT OUTER JOIN TABLE_B B 
   ON A.ID=B.ID

如果您对ID = 5进行过滤(假设FAC_ID = 5是您问题中的拼写错误),则只会获得一行。

答案 2 :(得分:0)

将其转变为内部联接的位置

select A.ID, B.FAC_ID, A.QUESTION, A.ACTION_ITEM
 FROM TABLE_A A 
 LEFT JOIN TABLE_B B 
   ON A.ID = B.ID
  AND B.FAC_ID = 245  

WHERE和B.FAC_ID = 245消除任何B.FAC_ID为空并基本上将其转换为内在连接