簡體   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