MySQL“NOT IN”/“LEFT JOIN”发出错误

时间:2011-09-10 14:14:53

标签: php mysql phpbb

我想写一些额外的查询到phpbb3 karma mod,它检查用户在没有给其他3个人的业力之前不能给同一个人提供业力。但我在SQL语法中收到错误...

我检查了thisthis链接并查询了我写的外观如下

SELECT * 
FROM phpbb_karma AS out 
WHERE out.poster_id = 134
AND out.poster_id
NOT IN 
(SELECT k.karma_id, k.user_id, k.poster_id
FROM phpbb_karma AS k
WHERE user_id = 108
ORDER BY k.karma_id DESC LIMIT 3)

所以我的内部查询得到了他(poster_id)给予业力的最后3个人(user_id)。这个查询单独工作,但与我的外部查询一起,它给了我错误

  

1064 - 您的SQL语法出错;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   'out WHERE out.poster_id = 134 AND out.poster_id NOT IN(SELECT   k.karma_id,k.u'在第2行

在我的外部查询中,我写道,接收业力的人是134,并且他不能出现在我的内部查询结果中。

该查询可能有什么问题?错误真的在第二行吗?

我用LEFT JOIN写了相同的查询,但它给了我相同的语法错误

SELECT *
FROM phpbb_karma AS out
LEFT JOIN phpbb_karma AS in
ON in.poster_id = out.poster_id
WHERE in.poster_id = 134 AND in.poster_id IS NULL
  

1064 - 您的SQL语法出错;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   靠近'out LEFT JOIN phpbb_karma AS in ON in.poster_id = out.poster_id   WHERE in.poster_'在第2行

MySQL版本为MySQL client version: mysqlnd 5.0.7-dev - 091210 - $Revision: 304625 $,但我认为问题不在版本中,因为LEFT JOIN不起作用

4 个答案:

答案 0 :(得分:1)

使用其他别名,因为out是保留关键字:http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html

答案 1 :(得分:1)

除了使用保留字作为别名之外,您不能将NOT ININ与返回多个列的子选项一起使用。

您基本上是在告诉MySQL将poster_id中的单个值与三个不同的值进行比较。现在应该采取哪一个?

一旦解决了别名的问题,您需要从子选择中删除两列。

根据您的命名架构,我假设您确实想要

NOT IN (SELECT k.karma_id FROM phpbb_karma ....)

代替。

答案 2 :(得分:0)

out是MySQL中的关键字。您可以通过将别名命名为其他内容或在out周围添加反引号来解决此问题。

答案 3 :(得分:0)

只需在outin附近添加标记即可。看起来它们是mysql中的保留关键字