簡體   English   中英

為什么我的 SQL 查詢在我使用 join 時不起作用?

[英]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 中的保留字。 在這種特殊情況下,它不會導致問題,但在其他情況下可能會。 查閱保留字和關鍵字列表以防止出現問題是個好主意。

db<>在這里擺弄

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM