mysql - 将 Access SQL 内部联接查询转换为 mySQL 查询的问题
问题描述
我无法找到导致以下查询没有结果的语法问题:
SELECT Table1.Country, Table_Data2.Part, Table_Data2.Description, Sum(Table_Data2.Quantity) AS Quantity, Table1.ship_time
FROM Table1 INNER JOIN Table_Data2 ON Table1.CodeValue = Table_Data2.CodeValue
GROUP BY Table1.Country, Table_Data2.Part, Table_Data2.Description, Table1.ship_time
HAVING (((Table_Data2.Part)="BB1234" Or (Table_Data2.Part)="BB-3454") AND ((Table1.ship_time)=Date()));
这应该会成功生成如下所示的表:
相反,不会出现语法问题,也不会加载任何记录。
上面的代码中似乎存在语法问题,因为它在 mySQL 中不像在 MS Access 中那样工作
解决方案
可能的修正很少:
要在 MySQL 中获取当前日期,请使用
Current_Date()
.Date()
MySQL 中的函数具有不同的行为,因为它用于从日期(时间)表达式中提取日期部分。仅字段名称周围的括号是不必要的。在多表查询中使用别名以提高代码清晰度和阅读能力。
此外,在 Have 子句中查看您的条件,它们更适合在 Where 子句中使用。因为它们不是聚合值,并且您也在这些相同的字段上进行分组。如果将它们转移到 Where 子句,您的查询将变得更加高效,因为 MySQL 将聚合过滤(减少)的数据,从而最大限度地减少临时表空间。
OR
此外,您可以将同一字段上的多个条件重写为IN(...)
你可以重写为:
SELECT
t1.Country,
t2.Part,
t2.Description,
Sum(t2.Quantity) AS Quantity,
t1.ship_time
FROM Table1 AS t1
INNER JOIN Table_Data2 AS t2
ON t1.CodeValue = t2.CodeValue
WHERE
t2.Part IN ('BB1234', 'BB-3454')
AND t1.ship_time = Current_Date()
GROUP BY
t1.Country,
t2.Part,
t2.Description,
t1.ship_time
推荐阅读
- web-scraping - Scrapy splash 不加载内容
- python - 如何忽略第一个屈服值?
- mongodb - MongoDB Ops Manager 更改 URL 根路径
- reactjs - 如何使用函数设置 React 状态
- h2 - 如果在内存 DB 中使用 H2,则 Flyway 从版本 1 开始
- javascript - 扩展具有深层嵌套属性的对象
- c# - Blazor Navigationmanager 取消在 locationchanged 上的导航
- reactjs - React 调度不起作用(userService 函数未在 userAction 中触发)
- html - 将 div 相互对齐并在列内创建列
- python - rasterio 无法打开 EPSG 支持文件 gcs.csv