繁体   English   中英

将 Access SQL 内部联接查询转换为 mySQL 查询时出现问题

[英]Issue converting Access SQL Inner Join Query to mySQL Query

我无法找到导致以下查询没有结果的语法问题:

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() MySQL 中的Date() function 具有不同的行为,因为它用于从日期(时间)表达式中提取日期部分。

  • 仅字段名称周围的括号是不必要的。 在多表查询中使用别名以提高代码清晰度和阅读能力。

  • 此外,在 Have 子句中查看您的条件,它们更适合在 Where 子句中使用。 因为它们不是聚合值,并且您也在这些相同的字段上进行分组。 如果将它们转移到 Where 子句,您的查询将变得更加高效,因为 MySQL 将聚合过滤(减少)的数据,从而最大限度地减少临时表空间。

  • 此外,您可以在与IN(...)相同的字段上重写多个OR条件

你可以重写为:

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  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM