![](/img/trans.png)
[英]SQL beginner - Why does my MySQL Join-query use no index / work so slow?
[英]Why does my SQL query not work when I use join?
我需要這個簡單的 SQL 查詢的幫助,我不明白問題出在哪里:
SELECT id
FROM transaction
JOIN users, link ON transaction.id = link.transaction_id
AND link.user_id = users.id
WHERE users.id = 2;
當我運行它時,我得到這個錯誤:
錯誤:“事務”附近:語法錯誤
正確使用JOIN
,它將起作用:
SELECT id
FROM transaction JOIN
link
ON transaction.id = link.transaction_id JOIn
users
ON link.user_id = users.id
WHERE users.id = 2;
您的查詢可能還有其他問題,例如id
不明確,但這不是您要問的問題。
您的查詢的問題是FROM
子句中逗號周圍的范圍。 逗號可防止后面的ON
子句看到該表。 這,
與CROSS JOIN
不同的一種方式。
當然,簡單的規則和最佳實踐是:永遠不要在FROM
子句中使用逗號。 始終使用正確、明確、標准、可讀的JOIN
語法。
假設事務、用戶和鏈接為 3 個單獨的表,我從事務表中獲取 id,您可以根據您的要求進行更改。
以下是 JOIN 的正確語法:
SELECT a.id
FROM transaction a
JOIN users ON transaction.id = link.transaction_id
JOIN link ON link.user_id = users.id
WHERE users.id = 2;
當我將您的查詢重寫為
SELECT ID
FROM TRANSACTION
INNER JOIN LINK
ON TRANSACTION.ID = LINK.TRANSACTION_ID
INNER JOIN USERS
ON LINK.USER_ID = USERS.ID
WHERE USERS.ID = 2
我得到的唯一錯誤是
ORA-00918: column ambiguously defined
這是因為您在多個表上定義了字段 ID。 您需要清楚地確定要返回的 ID,如
SELECT TRANSACTION.ID
FROM TRANSACTION
INNER JOIN LINK
ON TRANSACTION.ID = LINK.TRANSACTION_ID
INNER JOIN USERS
ON LINK.USER_ID = USERS.ID
WHERE USERS.ID = 2
還要注意 LINK 和 TRANSACTION 都是 Oracle 中的保留字。 在這種特殊情況下,它不會導致問題,但在其他情況下可能會。 查閱保留字和關鍵字列表以防止出現問題是個好主意。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.