簡體   English   中英

左外加入ON&AND&WHERE無法正常工作?

[英]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 JOINWHERE沒有問題。

可能還有其他原因導致此查詢不起作用嗎?

您正在將舊式連接語法與更好的連接語法混合使用。 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.

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