我对编码/SQL非常陌生,所以这个问题非常基本。
我需要提供一份报告,其中包含4辆不同的汽车在一个经销商身份下生产。以下查询只返回Buick进行的查询:
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与别克链接起来,并搜索我们整个数据库中的另一个
发布于 2019-12-05 19:50:07
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,以将结果限制在该制造商。
发布于 2019-12-05 21:15:24
您必须使用这两个查询中的任何一个:
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')或
SELECT *
FROM tbl_dms
WHERE tbl_dms.id_dealer = '7039'
AND tbl_dms.make IN ('buick', 'chevrolet', 'gmc', 'cadillac')发布于 2019-12-05 19:51:15
使用括号。
SELECT
*
FROM
tbl_dms
WHERE
tbl_dms.id_dealer = '7039' AND
(tbl_dms.make = 'buick' or 'chevrolet' or 'gmc' or 'cadillac')尝尝这个。你会得到经销商的ID和括号内的任何匹配。
https://stackoverflow.com/questions/59202328
复制相似问题