T-SQL从表中选择全部表和条件

时间:2011-10-05 11:00:17

标签: sql sql-server tsql select join

TableA Columns: A_ID, NAME, SOURCE, TITLE, EVENTID
TableB Columns: B_ID, EVENTID, CODE, FIELD

如何提取NAME,SOURCE,TITLE和FIELD或null(如果有CODE = x)?示例应该更好地展示它。它是SQL Server Express上的T-SQL。

示例:

TableA                                 |   TableB
-----------------------------------------------------------------------
A_ID, NAME, SOURCE, TITLE, EVENTID     |   B_ID, EVENTID, CODE, FIELD
-----------------------------------------------------------------------
1     john  s1      x      100         |   1     100      5     textA  
2     bruce s2      y      105         |   2     100      10    textB
3     bob   s3      z      110         |   3     105      5     textC
                                       |   4     110      5     textD
                                       |   5     110      10    textE

EventId 105没有代码10,因此结果应为null。怎么写SELECT问题会给我这样的结果:

[ john  | s1 | x | textB ]
[ bruce | s2 | y |       ]
[ bob   | s3 | z | textE ]

这可能很容易,但我无法弄明白......提前谢谢。

2 个答案:

答案 0 :(得分:3)

表格之间需要OUTER JOIN

SELECT A.NAME,
       A.SOURCE,
       A.TITLE,
       B.FIELD
FROM   TableA A
       LEFT JOIN TableB B
         ON A.EVENTID = B.EVENTID
            AND B.CODE = 10  

B.CODE = 10条件需要放在JOIN而不是WHERE子句中,以避免有效地将查询转回INNER JOIN

如果有多个加入记录,这可以为特定A值返回多行但是您的问题中是否仍然无法确定您的数据是否可行(如果是这样的话{{1}应该使用值)这可能是你想要的行为。

答案 1 :(得分:2)

这应该这样做

SELECT a.NAME, a.SOURCE, a.TITLE, b.FIELD 
  FROM TableA a
       LEFT JOIN TableB b ON b.EventId = a.EventId
             AND b.Code = 10