[英]Left Outer Join with ON & AND & WHERE not working?
對我的查詢看起來非常好,但我仍然遺憾地得到錯誤:
SELECT s.id, s.uid, s.sexnumber, s.rating, s.sextime, w.who
FROM users u, sex s
LEFT OUTER JOIN who w
JOIN whos ws ON s.id = ws.sid AND w.id=ws.wid
WHERE u.sessionCheck='f9cf8142a10357d4d676f91e99a3242a' AND s.uid = u.uid
GROUP BY s.id
ORDER BY s.sextime ASC
具有以下內容:
Native message: You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'WHERE
u.sessionCheck='f9cf8142a10357d4d676f91e99a3242a' AND s.uid = u.uid GROUP '
at line 1
據我所知,使用帶有LEFT OUTER JOIN
的WHERE
沒有問題。
可能還有其他原因導致此查詢不起作用嗎?
您正在將舊式連接語法與更好的連接語法混合使用。 在from
子句中對逗號說“不”。 我想這就是你想要的:
SELECT s.id, s.uid, s.sexnumber, s.rating, s.sextime, w.who
FROM users u join
sex s
on s.uid = u.uid LEFT OUTER JOIN
whos ws
ON s.id = ws.sid LEFT OUTER JOIN
who w
ON w.id=ws.wid
WHERE u.sessionCheck = 'f9cf8142a10357d4d676f91e99a3242a'
GROUP BY s.id
ORDER BY s.sextime ASC;
與這個問題,
運營商在MySQL實際上是記錄在這里 ,從舊版本的變化方面。
例:
CREATE TABLE t1 (i1 INT, j1 INT); CREATE TABLE t2 (i2 INT, j2 INT); CREATE TABLE t3 (i3 INT, j3 INT); INSERT INTO t1 VALUES(1,1); INSERT INTO t2 VALUES(1,1); INSERT INTO t3 VALUES(1,1); SELECT * FROM t1, t2 JOIN t3 ON (t1.i1 = t3.i3);
以前,由於t1,t2的隱式分組為(t1,t2),SELECT是合法的。 現在JOIN優先,因此ON子句的操作數是t2和t3。 因為t1.i1不是任何一個操作數中的列,所以結果是'on clause'錯誤中的未知列't1.i1'。 要允許處理連接,請使用括號顯式地對前兩個表進行分組,以便ON子句的操作數為(t1,t2)和t3:
SELECT * FROM (t1, t2) JOIN t3 ON (t1.i1 = t3.i3);
或者,避免使用逗號運算符並改為使用JOIN:
SELECT * FROM t1 JOIN t2 JOIN t3 ON (t1.i1 = t3.i3);
此更改也適用於將逗號運算符與INNER JOIN,CROSS JOIN,LEFT JOIN和RIGHT JOIN混合的語句,所有這些語句現在都具有比逗號運算符更高的優先級。
問題是以下行:
LEFT OUTER JOIN who w JOIN whos ws ON s.id = ws.sid AND w.id=ws.wid
你必須改為:
JOIN whos ws ON s.id = ws.sid
LEFT OUTER JOIN who w ON w.id=ws.wid
您也混合了連接語法,建議僅使用新的連接樣式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.