对我的查询看起来完全没问题,但我仍然遗憾地得到错误:
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
据我所知,将WHERE
与LEFT OUTER JOIN
一起使用没有问题。
这个查询无效还有其他原因吗?
答案 0 :(得分:2)
您正在将旧式连接语法与更好的连接语法混合使用。只说'#34;不"在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中,
运算符的问题实际上已经记录here,就旧版本的更改而言。
示例:
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的隐式分组,SELECT是合法的 as(t1,t2)。现在JOIN优先,因此ON的操作数 子句是t2和t3。因为t1.i1不是任何一列中的列 操作数,结果是一个未知列' t1.i1'在' on条款' 错误。要允许处理联接,请对前两个表进行分组 显式带括号,以便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,所有这些 现在优先级高于逗号运算符。
答案 1 :(得分:0)
问题在于以下一行:
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
此外,您混合了连接语法,建议仅使用新的连接样式。