2013-12-14 58 views
1

我有一個子查詢,我的IN表達式來自主表中的一列。 MySQL將這個列看作一個字符串。我該如何解決?如何使WHERE IN不是字符串?

因此,舉例來說,我的查詢被解釋爲:

SELECT song.title, 
    (SELECT group_concat(username) FROM users WHERE user_id IN ('4,9')) as editors 
FROM songs song WHERE ... 

的「4,9」從所謂editors_list我的歌曲表列是user_ids的CSV到來。

因此MySQL只能做一個匹配上的4 user_ID的我怎樣才能使MySQL看songs.editors_list爲4,9,以便查詢看起來像:

SELECT song.title, 
    (SELECT group_concat(username) FROM users WHERE user_id IN (4,9)) as editors 
FROM songs song WHERE ... 

,因此它匹配上USER_ID = 4,USER_ID = 9

我當前的查詢是這樣的:

SELECT song.title, 
    (SELECT group_concat(username) FROM users WHERE user_id IN (song.editors_list)) as editors 
FROM songs song WHERE ... 
+0

這是沒有意義的使用GROUP_CONCAT,然後在其中篩選數據。你目前的模式是什麼?你的預期結果是什麼?示例數據將有助於 –

回答

3

MySQL有一個內置功能,可以讓你搜索名爲一個CSV格式內的值。

SELECT a.title, 
     group_concat(b.username) 
FROM songs a 
     INNER JOIN b 
      ON FIND_IN_SET(b.user_id, a.editors_list) > 0 
WHERE ... 
GROUP BY a.title 
+1

+1,並且我將使用yoda測試的正則表達式:/這當然是正確的答案 – Bohemian

+0

我是否可以使用其他連接來完成此類操作?我的查詢中也有一對左連接。 – Mike

+0

當然可以。 –

相關問題