sql - 在 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与别克链接并在我们的整个数据库中搜索其他品牌
解决方案
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
对该表执行操作以将您的结果限制为该制造商。
推荐阅读
- python - 无法使用 mysql-connector-python 连接到 localhost,错误 1130
- linux - 键值对中所有值的 SED
- python - 如何处理人工神经网络中的多个分类列?
- javascript - 如何使用 vue 绑定 boostrap 模态数据
- umbraco - 在 Umbraco 中,如何在文档类型中多次重复属性块?
- javascript - 我如何使用 javascript 访问 iframe #document
- android - Android Studio - 每次创建新活动时都会出错
- gtk - 为什么 gtk_render_check 结果不是我所期望的?
- javascript - PHP验证不刷新
- python - 将 SERVING 元标记添加到 TensorFlow 中的冻结模型