假设我有一个表,[所有者],只有一个“名称”。然后我有一个表[Dog],一个“Name”,一个“LeashColor”和一个“OwnerName”。
示例数据:
Owner: <Name: Joe>, <Name: Sue>
Dog: <Name: Rover, LeashColor: Red, OwnerName: Joe>,
<Name: Pup, LeashColor: Green, OwnerName: Joe>,
<Name: Spot, LeashColor: Purple, OwnerName: Sue>,
<Name: Lassie, LeashColor: Yellow, OwnerName: Sue>
我想要一个SQL查询,让所有所有者都没有一只名叫狗的狗。例如,当input =“Rover”时,查询将返回Sue,因为她没有一只名为Rover的狗,但Joe会这样做。
如果可能的话,最好有一个查询可以让所有的主人都没有一只名叫狗的狗,但是如果他们确实有一只名叫狗的狗,那么如果狗的皮带颜色是那么就得到它们
所以,输入,=“Rover”和=“Red”,Joe和Sue都会被返回(Sue没有Rover,Joe有一个带红色皮带的Rover)。但是,如果输入是“流浪者”,“绿色”,则只返回苏(苏没有流浪者,乔有流浪者,颜色不是绿色)。
我一直在困惑这个。我会非常感谢任何提示。
答案 0 :(得分:1)
使用NOT IN
查找不在给定子查询中的记录:
SELECT *
FROM Owner
WHERE Name NOT IN
(SELECT Name from Dog
WHERE Name = @dogName)
您可以使用LEFT JOIN获得第二个结果:
SELECT o.*
FROM Owner o
LEFT JOIN Dog d
ON o.Name = d.OwnerName
AND d.Name = @dogName
WHERE d.Name IS NULL // no dog by that name
OR d.LeashColor = @leashColor // dog by than name with the right color leash