我想在SELECT中选择WHERE,我做错了什么?

时间:2010-06-01 16:11:07

标签: mysql

SELECT * 
FROM `seriallog` WHERE `lastevent` IN
(SELECT GROUP_CONCAT(CONCAT(' \'', `eventid`, '\''))
        FROM `permissions` WHERE `permissions`.`userpkid` = 1)

3 个答案:

答案 0 :(得分:3)

您可能正在尝试将int(lastevent)与连接字符串(子查询的结果)进行比较。

没有更多信息很难说,但这可能是你想做的事情:

select * 
from seriallog sl
inner join permissions p on sl.lastevent = p.eventid
where p.userpkid = 1

答案 1 :(得分:2)

您编写它的方式,内部查询将返回字符串,例如"1, 2, 3",因此只有serialloglastevent列{{}}的行{1}}完全匹配。

您可能有兴趣匹配其值在SET中的任何行。这就是SQL的目的;您不必申请任何特殊工程。以下方法可行:

"1, 2, 3"

但是,最好写一下:

SELECT *
FROM seriallog WHERE lastevent IN
(SELECT eventid FROM permissions WHERE permissions.userpkid = 1)

这允许MySQL将查询视为更像JOIN,并且可能更有效地执行它。

答案 2 :(得分:0)

这是MySQL最优化的格式。一般来说,MySQL不喜欢子查询。

SELECT * 来自seriallog sl 在sl.lastevent = p.eventid上加入权限p WHERE permissions.userpkid = 1