我想写一些额外的查询到phpbb3 karma mod,它检查用户在没有给其他3个人的业力之前不能给同一个人提供业力。但我在SQL语法中收到错误...
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不起作用
答案 0 :(得分:1)
使用其他别名,因为out
是保留关键字:http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html
答案 1 :(得分:1)
除了使用保留字作为别名之外,您不能将NOT IN
或IN
与返回多个列的子选项一起使用。
您基本上是在告诉MySQL将poster_id
中的单个值与三个不同的值进行比较。现在应该采取哪一个?
一旦解决了别名的问题,您需要从子选择中删除两列。
根据您的命名架构,我假设您确实想要
NOT IN (SELECT k.karma_id FROM phpbb_karma ....)
代替。
答案 2 :(得分:0)
out
是MySQL中的关键字。您可以通过将别名命名为其他内容或在out
周围添加反引号来解决此问题。
答案 3 :(得分:0)
只需在out
和in
附近添加标记即可。看起来它们是mysql中的保留关键字