也许不是最具描述性的主题,但问题是,虽然下面的查询完全符合我的要求,但我还想在Note.Name =' Travel Advisory&#39时返回记录;不是真的。 但是,当没有Note.Name等于' Travel Advisory'对于Note.Notes,我仍然希望返回选择值EXCEPT。
Note.Name列有各种值,例如'旅游咨询'一般信息'和'指南'。
SELECT Supplier.Name, Supplier.Changeoverday, Supplier.Code, Note.Notes
FROM Supplier
INNER JOIN Note
ON Supplier.ID=Note.LINKID
WHERE Supplier.TID = 315
AND
Supplier.SID = 2350
AND
Note.Name = 'Travel Advisory'
答案 0 :(得分:3)
听起来你想要LEFT JOIN
:
SELECT Supplier.Name, Supplier.Changeoverday, Supplier.Code, Note.Notes
FROM Supplier
LEFT JOIN Note
ON Supplier.ID=Note.LINKID
AND Note.Name = 'Travel Advisory'
WHERE Supplier.TID = 315
AND
Supplier.SID = 2350
如果Note
表中没有匹配的记录,则Notes
将为null
。
答案 1 :(得分:0)
编辑:我没有注意到你从2个表中选择,我同意另一个海报回答的OUTER JOIN
方法。我的方法是一种方便的方法来对抗1个表(如果你不使用表别名和OUTER JOIN
,那就是......)
您可以使用案例来选择列并执行您想要的操作,只需从WHERE中删除该部分即可。我认为这种语法很好......
SELECT
Supplier.Name
, Supplier.Changeoverday
, Supplier.Code
, CASE WHEN Note.Notes = 'Travel Advisory' THEN Note.Notes ELSE 'Not Travel Advisory' END
FROM Supplier
INNER JOIN Note
ON Supplier.ID=Note.LINKID
WHERE Supplier.TID = 315
AND
Supplier.SID = 2350
答案 2 :(得分:0)
您可以使用LEFT JOIN
在没有匹配时返回NULL
,并使用SELECT CASE
来确定在{{1}的情况下返回哪个Note.Notes值}}
Note.Name = 'Travel Advisory'
但是,如果要返回条件Note.Name ='Travel Advisory'为SELECT Supplier.Name, Supplier.Changeoverday, Supplier.Code,
case when Note.Name = 'Travel Advisory' then '0' else Note.Notes END as Notes
FROM Supplier
LEFT JOIN Note
ON Supplier.ID=Note.LINKID
WHERE Supplier.TID = 315
AND
Supplier.SID = 2350
的行,我还会删除同一列(TRUE, False or UNKNOWN
)上的过滤器。< / p>