爲了簡單起見,假設你有兩個表...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。除此之外,我同意你對病情的簡化。我得出的結論有點不同:一個人不能有紅襯衫或襯衫。但是,如果他們沒有任何襯衫,也包括一件紅色襯衫,那麼就足以檢查是否缺少一件紅色襯衫來掩飾這兩種情況。 –