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 ]
这可能很容易,但我无法弄明白......提前谢谢。
答案 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