sql - 带有两个 AND 且包含多个 OR 的 SQL 选择语句
问题描述
无法理解为什么下面的代码不起作用。
WHERE 子句中的第二行和第三行不能一起使用。如果我拿出一个(或者)他们工作。我确信我正在做的事情有一个术语,但我找不到它。
SELECT oh.location,SUM(od.net_ext) as retail_sales
FROM comm.dbo.ordhrd as oh
JOIN comm.dbo.ordetail as od
ON od.location = oh.location
AND od.invoice# = oh.invoice#
AND od.inv_date = oh.inv_date
JOIN comm.dbo.invmas as inv
ON inv.item_num = od.item#
WHERE type_of_rec = '01'
AND ( inv.in_group = 'LABM' OR inv.in_group = 'LABQ' OR inv.in_group = 'LABP' )
AND ( inv.category = 'LTAT' OR inv.category = 'LTMT' OR inv.category = 'LTHWY' OR inv.category = 'TOUR' OR inv.category = 'UHP' OR inv.category = 'SNOW' OR inv.category = 'STDLS' )
AND od.inv_date BETWEEN '" . $current_start_date . "' AND '" . $current_end_date . "'
GROUP BY oh.location
预期结果将是过滤查询的结果
解决方案
您可能希望将 in_group、category 和 type_of_rec 添加到 GROUP BY 子句中。如果您仍然没有收到结果,那么您的查询错误可能有多种原因。连接可能没有限制,inv.category 字符串需要'% %'
通配符,BETWEEN 子句的格式可能没有正确映射(即:错误的日期格式会抛出结果)等。
或者,坦率地说,可能没有任何记录符合您的 WHERE 子句标准。在评论中,您声明从查询的 WHERE 部分中删除行使其返回行。这告诉你什么?重新添加它可能会限制过滤器返回任何行。
如果不发布示例数据,此站点上的用户几乎不可能判断有效查询的外观。
我在下面写了一些可能更灵活的东西。它将 WHERE 子句中引用的列添加到 GROUP BY 子句,使用 IN 子句格式化 AND/OR 子句(提高可读性/限制潜在错误)并用 LEFT JOIN 替换 JOIN 语句
SELECT oh.location,
SUM(od.net_ext) as retail_sales
FROM comm.dbo.ordhrd as oh
LEFT JOIN comm.dbo.ordetail as od
ON od.location = oh.location
AND od.invoice# = oh.invoice#
AND od.inv_date = oh.inv_date
LEFT JOIN comm.dbo.invmas as inv
ON inv.item_num = od.item#
WHERE type_of_rec = '01'
AND inv.in_group IN ('LABM','LABQ','LABP' )
AND inv.category IN ('LTAT', 'LTMT', 'LTHWY', 'TOUR','UHP', 'SNOW', 'STDLS')
AND od.inv_date BETWEEN '" . $current_start_date . "' AND '" . $current_end_date . "'
GROUP BY oh.location, inv.in_group, inv.category
推荐阅读
- javascript - 给定数组,编写一个返回订单对象的函数
- java - Spring OAuth2 通过 Client-Id 获取 UserInfoUri
- python-3.x - LP3THW - python3 ex18.py(及更高版本)不再运行
- powershell - 如何在powershell中将多个值放入一个变量中?
- mysql - 有什么方法可以使用 select 语句(mysql)检索表的 ddl?
- javascript - `!name` 在 javascript 中是什么意思?
- arrays - 如何在c中创建一个链表数组?
- javascript - NetSuite Suitelet子列表分页处理方法及首页索引列表位置调整
- java - Log4j 不断写入旋转删除的日志文件
- python - 在递归函数调用中保存列表