首页 > 解决方案 > 在 SQL 中同时使用 AND 和 OR

问题描述

我对编码/SQL 很陌生,所以这个问题非常基础。

我需要生成一份报告,其中包含在一个经销商 ID 下制造的 4 种不同车辆。以下查询仅返回别克品牌:

SELECT
*
FROM
tbl_dms
WHERE
tbl_dms.id_dealer = '7039' AND
tbl_dms.make = 'buick' or 'chevrolet' or 'gmc' or 'cadillac'

为了得到我想要的结果,我唯一能做的就是:

WHERE
tbl_dms.id_dealer = 7039 AND
tbl_dms.make = 'buick' or
tbl_dms.id_dealer = 7039 AND
tbl_dms.make = 'chevrolet' or
tbl_dms.id_dealer = 7039 AND
tbl_dms.make = 'gmc' or
tbl_dms.id_dealer = 7039 and
tbl_dms.make = 'cadillac'

有没有办法在不必每次都列出经销商 ID 的情况下获得此结果?

编辑:如果我使用这个:

WHERE
tbl_dms.id_dealer = 7039 AND
tbl_dms.make = 'buick' or
tbl_dms.make = 'chevrolet' or
tbl_dms.make = 'gmc' or
tbl_dms.make = 'cadillac'

然后它只将dealerID与别克链接并在我们的整个数据库中搜索其他品牌

标签: sql

解决方案


WHERE
    tbl_dms.id_dealer = '7039'
    AND tbl_dms.make IN ('buick', 'chevrolet', 'gmc', 'cadillac')

如果你真的想要OR表达式,你需要括号

WHERE
    tbl_dms.id_dealer = 7039 
    AND (
        tbl_dms.make = 'buick' or
        tbl_dms.make = 'chevrolet' or
        tbl_dms.make = 'gmc' or
        tbl_dms.make = 'cadillac'
    )

如果我重新编写查询以演示服务器将如何实际查看每个表达式,这有助于解释为什么需要括号:

WHERE
    (tbl_dms.id_dealer = 7039 AND tbl_dms.make = 'buick')
   OR tbl_dms.make = 'chevrolet' 
   OR tbl_dms.make = 'gmc' 
   OR tbl_dms.make = 'cadillac'

在这里,无论经销商是谁,任何雪佛兰、gmc 或凯迪拉克都可以匹配,这就是原始查询所做的事情。

最后,我注意到这些都是通用汽车品牌。最好的办法是为 提供一个单独的表,makes其中还包括一个字段manufacturer,这样这些品牌都共享相同的GM制造商价值,您可以JOIN对该表执行操作以将您的结果限制为该制造商。


推荐阅读