0

假设我有一个表 [Owner],只有一个“名称”。然后我有一个表 [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 查询,它可以让所有没有狗的主人。例如,当输入 =“Rover”时,查询将返回 Sue,因为她没有名为 Rover 的狗,但 Joe 有。

如果可能的话,最好有一个查询来获取所有没有狗的主人,但如果他们确实有一只狗,如果狗的皮带颜色是

因此,输入 = "Rover" 和 = "Red",Joe 和 Sue 都将返回(Sue 没有 Rover,Joe 有带红色皮带的 Rover)。但是,如果输入是“Rover”、“Green”,则只会返回 Sue(Sue 没有漫游者,Joe 有漫游者并且颜色不是绿色)。

我一直在为这个困惑一段时间。我将非常感谢任何提示。

4

1 回答 1

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
于 2013-08-26T18:50:14.463 回答