我有以下(简化)视图:
SELECT T1.item, T2.text
FROM T1 LEFT OUTER JOIN
T2 ON T1.code = T2.code AND T1.item = T2.item
WHERE (T1.item = '12345') AND (T1.code = '678') AND (T2.detailID = '99')
Run Code Online (Sandbox Code Playgroud)
T1
?????????????????????????????????
? code ? item ? other info... ?
?????????????????????????????????
? code1 ? item1 ? other info... ?
? code2 ? item2 ? other info... ?
?????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
T2
?????????????????????????????????????????????????????
? code ? item ? detailID ? text ? other info ?
?????????????????????????????????????????????????????
? code1 ? item1 ? detailID1 ? text1 ? other info... ?
? code1 ? item1 ? detailID2 ? text2 ? other info... ?
? code1 ? item1 ? detailID3 ? text3 ? other info... ?
? code2 ? item2 ? detailID1 ? text4 ? other info... ?
?????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
注意:detailID在多个代码/项目上重复使用
在大多数情况下,这很好.除了在某些情况下,detailID代码和项目不存在99.当发生这种情况时,它会返回0行(我认为LEFT OUTER JOIN会解决这个问题,但我的SQL非常业余).我怎么能得到它所以它确实返回一行,但只是
12345, ''
Run Code Online (Sandbox Code Playgroud)
那个例子的结果呢?
您需要将第二个表上的条件移动到on子句:
SELECT T1.item, T2.text
FROM T1 LEFT OUTER JOIN
T2
ON T1.code = T2.code AND T1.item = T2.item AND T2.detailID = '99'
WHERE (T1.item = '12345') AND (T1.code = '678') ;
Run Code Online (Sandbox Code Playgroud)
当没有匹配时,则值为,NULL并且您的原始where子句将其过滤掉.
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |