Mysql
使用內部連接獲取 MySQL 選擇的正確語法
使用 MySQL 版本 5.1.73 和 phpmyadmin 4.0.10.16。
我無法通過語法檢查器:
select * from courses as co , course_type as ct left join course_leaders as cl on cl.course_leaders_id = co.course_leaders_id1 left join course_links_to_innstyle as cli on cli.course_links_to_innstyle_id = co.course_links_to_innstyle_id where co.course_type_id = ct.course_type_id order by short,start_date ASC
它堅持認為確實沒有列“co.course_leaders_id1”。
有什麼想法嗎?
好的,這就是我想出的結果(在下面的幫助下 - 謝謝)
select * from courses as co left join course_leaders as cl on cl.course_leaders_id = co.course_leaders_id1 left join course_links_to_innstyle as cli on cli.course_links_to_innstyle_id = co.course_links_to_innstyle_id inner join course_type as ct on co.course_type_id = ct.course_type_id order by short,start_date ASC
是的,問題之一是您將顯式 (SQL-92)
JOIN
語法與隱式連接,
(SQL-89) 逗號語法混合在一起。雖然這是允許的,並且稍加註意它甚至可以正常工作,但很容易出現這種類型的錯誤。您的
FROM
查詢部分:from courses as co , course_type as ct left join course_leaders as cl on cl.course_leaders_id = co.course_leaders_id1 left join course_links_to_innstyle as cli on cli.course_links_to_innstyle_id = co.course_links_to_innstyle_id
被解析為:
from courses as co , -- <-- that acts as a CROSS JOIN ( ( course_type as ct left join course_leaders as cl on cl.course_leaders_id = co.course_leaders_id1 ) left join course_links_to_innstyle as cli on cli.course_links_to_innstyle_id = co.course_links_to_innstyle_id )
現在很清楚,括號裡面的,
co
是沒有定義的。問題二是 沒有加入條件
ct
。您有 4 個表,但只有 2 個(而不是 3 個)加入條件。這要麼是您錯過的事情,要麼是查詢的目的是執行CROSS JOIN
.解決方案:
- 最好在
JOIN
任何地方都使用顯式語法,而不是將兩者(語法)混合。- 通過添加缺少的條件或使用
CROSS JOIN
如果這是查詢的意圖來修復程式碼。