SELECT *
FROM `seriallog` WHERE `lastevent` IN
(SELECT GROUP_CONCAT(CONCAT(' \'', `eventid`, '\''))
FROM `permissions` WHERE `permissions`.`userpkid` = 1)
答案 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"
,因此只有seriallog
中lastevent
列{{}}的行{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