首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQL中使用AND和OR

在SQL中使用AND和OR
EN

Stack Overflow用户
提问于 2019-12-05 19:47:43
回答 3查看 89关注 0票数 1

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

我需要提供一份报告,其中包含4辆不同的汽车在一个经销商身份下生产。以下查询只返回Buick进行的查询:

代码语言:javascript
复制
SELECT
*
FROM
tbl_dms
WHERE
tbl_dms.id_dealer = '7039' AND
tbl_dms.make = 'buick' or 'chevrolet' or 'gmc' or 'cadillac'

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

代码语言:javascript
复制
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?

编辑:如果我使用这个:

代码语言:javascript
复制
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与别克链接起来,并搜索我们整个数据库中的另一个

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-12-05 19:50:07

代码语言:javascript
复制
WHERE
    tbl_dms.id_dealer = '7039'
    AND tbl_dms.make IN ('buick', 'chevrolet', 'gmc', 'cadillac')

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

代码语言:javascript
复制
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'
    )

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

代码语言:javascript
复制
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,以将结果限制在该制造商。

票数 6
EN

Stack Overflow用户

发布于 2019-12-05 21:15:24

您必须使用这两个查询中的任何一个:

代码语言:javascript
复制
SELECT * 
FROM tbl_dms 
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')

代码语言:javascript
复制
SELECT *
FROM tbl_dms
WHERE tbl_dms.id_dealer = '7039' 
AND tbl_dms.make IN ('buick', 'chevrolet', 'gmc', 'cadillac')
票数 0
EN

Stack Overflow用户

发布于 2019-12-05 19:51:15

使用括号。

代码语言:javascript
复制
SELECT
*
FROM
tbl_dms
WHERE
tbl_dms.id_dealer = '7039' AND
(tbl_dms.make = 'buick' or 'chevrolet' or 'gmc' or 'cadillac')

尝尝这个。你会得到经销商的ID和括号内的任何匹配。

票数 -4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59202328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档