sql - 如何从 x 等于多个值的地方进行选择?

我在调试一些代码,遇到如下SQL查询(简化版):

SELECT ads.*, location.county 
FROM ads
LEFT JOIN location ON location.county = ads.county_id
WHERE ads.published = 1 
AND ads.type = 13
AND ads.county_id = 2
OR ads.county_id = 5
OR ads.county_id = 7
OR ads.county_id = 9

我从查询中得到了非常奇怪的结果,我认为这是因为第一个 OR 否定了在它之前找到的 AND 运算符。

这会返回所有类型的广告的结果,而不仅仅是类型 13。

每次调用查询时,可能需要查找不同数量的县实体。

任何有关正确方法的帮助将不胜感激。

最佳答案

在“OR”周围加上括号:

SELECT ads.*, location.county 
FROM ads
LEFT JOIN location ON location.county = ads.county_id
WHERE ads.published = 1 
AND ads.type = 13
AND
(
    ads.county_id = 2
    OR ads.county_id = 5
    OR ads.county_id = 7
    OR ads.county_id = 9
)

或者更好的是,使用 IN:

SELECT ads.*, location.county 
FROM ads
LEFT JOIN location ON location.county = ads.county_id
WHERE ads.published = 1 
AND ads.type = 13
AND ads.county_id IN (2, 5, 7, 9)

https://stackoverflow.com/questions/261783/

相关文章:

mysql - 为什么 MySQL InnoDB 插入这么慢?

mysql - 我可以在我的 WordPress 安装的 wp_options 表中删除 trans

mysql - 如何为 MySQL 中的每个组选择第一行?

mysql - 如何在 phpMyAdmin 中查看我的存储过程?

mysql - 错误!找不到 MySQL 管理器或服务器 PID 文件!威联通

mysql - 目录、模式、用户和数据库实例之间的关系

mysql - 如何从 MySQL 中的字符串中删除所有非字母数字字符?

mysql - "n:m"和 "1:n"在数据库设计中的意义

mysql - 在 Windows 上的 XAMPP 中哪里可以更改 lower_case_tabl

sql - LOAD DATA LOCAL,如何跳过第一行?