2010-06-01 57 views
0
SELECT * 
FROM `seriallog` WHERE `lastevent` IN 
(SELECT GROUP_CONCAT(CONCAT(' \'', `eventid`, '\'')) 
     FROM `permissions` WHERE `permissions`.`userpkid` = 1) 
+2

什麼是你期待得到什麼?你究竟得到了什麼? – 2010-06-01 16:13:24

回答

3

您可能試圖將int(lastevent)與串聯字符串(子查詢的結果)進行比較。

這是很難說沒有更多的信息,但是這可能是你想要做什麼:

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

可能想寫這樣的第一行:'SELECT sl。*' – Sonny 2010-06-01 20:12:56

2

你寫它的方式,內部查詢將返回一個字符串這樣"1, 2, 3"只行serialloglastevent列的"1, 2, 3"恰好相符。

你大概有興趣匹配其值在SET中的任何行。這就是SQL設計的目的;你不必申請任何特殊的工程。下面將工作:

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

然而,這將是可取的,而不是寫:

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

這使得MySQL的對待查詢更像是JOIN,想必更有效地執行它。

0

這是MySQL最優化的格式。一般來說,MySQL不喜歡子查詢。

SELECT * FROM SL seriallog加入 上sl.lastevent權限P = p.eventid WHERE permissions.userpkid = 1

相關問題