[英]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.