左外加入ON& AND&什么不工作?

时间:2014-03-21 01:14:58

标签: mysql sql

对我的查询看起来完全没问题,但我仍然遗憾地得到错误:

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

据我所知,将WHERELEFT OUTER JOIN一起使用没有问题。

这个查询无效还有其他原因吗?

2 个答案:

答案 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 

此外,您混合了连接语法,建议仅使用新的连接样式。