你混合隱式聯接和明確連接。隱式連接語法(列出FROM
子句中的表)已棄用over 25 years ago。
作爲一個簡單的規則,從來沒有使用FROM
子句中的逗號:
SELECT R.run_id, restaurant_id, created_date
FROM restaurant_history H
JOIN run R ON H.run_id = R.run_id;
至於爲什麼它給了這樣的錯誤,錯誤是雙重的。讓我們來看看你寫了什麼:
SELECT run_id, restaurant_id, created_date
FROM restaurant_history, run
JOIN run ON restaurant_history.run_id = run.run_id;
你之前有查詢是下面的等價:
SELECT run_id, restaurant_id, created_date
FROM restaurant_history
CROSS JOIN run
INNER JOIN run ON restaurant_history.run_id = run.run_id;
的原因錯誤是因爲你有表run
中列出兩次沒有別名的查詢在兩者之間進行辨別。 ON
子句引用了run
表,但它不知道你的意思。
此外,您無意中在restaurant_history
和run
之間創建了CROSS JOIN
- 我確定您不想要的東西。
但是,僅刪除FROM
子句中的第二個表格,仍然會給出關於SELECT
語句中模糊列(run_id
)的錯誤。該列存在於兩個表中(如我們可以從JOIN
看到的那樣),並且沒有明確地告訴它哪個表可以選擇,它不知道如何處理該列並且會引發錯誤。
要解決這個問題,您還需要別名表(我在解決方案中放入了H
和R
別名)。
有關不同JOIN
類型的詳細信息,請參閱這個問題:
What is the difference between "INNER JOIN" and "OUTER JOIN"?
有關顯性VS隱JOIN
S比信息,請參見這裏:
Bad habits to kick : using old-style JOINs
請發佈表格模式,樣本輸入數據和所需的輸出。 – GurV