SQL:如何在带有“NOT IN”条件的“Where”子句中使用“and”和“or”
Posted
技术标签:
【中文标题】SQL:如何在带有“NOT IN”条件的“Where”子句中使用“and”和“or”【英文标题】:SQL : How to use “and” and “or” in a “Where” clause with "NOT IN" conditions 【发布时间】:2017-06-07 13:16:30 【问题描述】:我有一个查询应该让我返回特殊区域之外的所有用户。如果我有区域,结果还是一样的
SELECT users.id AS id, SUBSTRING(users.zipcode, 1, 2)
FROM users JOIN country ON users.country_id = country.country_id
WHERE country.country_code NOT IN ('AD','AF','BE')
OR (country.country_code = 'FR' AND SUBSTRING(users.zipcode, 1, 2)
NOT IN (69,38,26,07,42))
标识 |用户邮编 |国家代码
1 | 38 | FR
1 | 69 |是
我不希望所有用户使用 country_code 'AD'、'AF'、'BE' 但如果 country_code 是“FR”,我不希望只使用 user_zipcode 为 69、38、26、07、42 的用户
【问题讨论】:
你能提供样本数据和你想要的结果吗?这将有助于我们了解您想要做什么。 我认为 'FR' 需要包含在第一个 not in 中。因为它有特殊的附加条件需要考虑。如果邮政编码位于 (69,38,26,07,42) 中,您似乎希望所有用户不在 AD、AF、BE 和 FR 国家/地区。如果正确,则 FR 需要排在第一个 not in。还考虑 not in 不适用于 NULL 值。如果 国家:安道尔、阿富汗和比利时法国省:罗纳、伊泽尔、德罗姆、阿尔代什和卢瓦尔。请解释你想在这里发生什么。 【参考方案1】:不包括安多拉、阿富汗、比利时和一些法国省份:
WHERE country.country_code NOT IN ('AD','AF','BE')
AND NOT (
country.country_code = 'FR' AND
SUBSTRING(users.zipcode, 1, 2) IN (69,38,26,07,42)
)
【讨论】:
以上是关于SQL:如何在带有“NOT IN”条件的“Where”子句中使用“and”和“or”的主要内容,如果未能解决你的问题,请参考以下文章
SQL:如何在同一行显示 WHERE IN 和 WHERE NOT IN?