SQL查询:全部<parenttablerecord>与<child>不匹配,属性值= <value> </value> </child> </parenttablerecord>

时间:2013-08-26 18:46:57

标签: sql

假设我有一个表,[所有者],只有一个“名称”。然后我有一个表[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)。但是,如果输入是“流浪者”,“绿色”,则只返回苏(苏没有流浪者,乔有流浪者,颜色不是绿色)。

我一直在困惑这个。我会非常感谢任何提示。

1 个答案:

答案 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