为了简单起见,假设你有两个表...SQL查询来选择从一个表,其中不是没有在其他表或该表中与特定值
users:
user_id
name
age
clothing:
user_id
type
color
,你会如何选择所有用户谁是21岁,或者根本没有任何衬衫,或者有衬衫,但没有任何红衫?我尝试迄今还看像...
SELECT users.user_id
FROM users LEFT JOIN clothing
ON users.user_id = clothing.user_id
AND clothing.type = shirt
AND clothing.color != red
WHERE users.age = 21;
我知道如何做到这一点查询,如果我只是想选择的用户不具有在clothing
表(WHERE clothing.user_id IS NULL
)项的条目,但我似乎无法将这种逻辑延伸到这个稍微复杂的情况。
添加了“NOT NULL”检查,因为这似乎可能在您的表结构中。这是你需要将它分成两张桌子的另一个很好的理由 - 一件衣服的存在与是否有人穿着无关。 –
如果您将NOT IN重写为NOT EXISTS,您可以避免检查user_id IS NOT NULL。除此之外,我同意你对病情的简化。我得出的结论有点不同:一个人不能有红衬衫或衬衫。但是,如果他们没有任何衬衫,也包括一件红色衬衫,那么就足以检查是否缺少一件红色衬衫来掩饰这两种情况。 –