2014-07-23 31 views
0

我有表結構使用單值分隔的列表作爲參數

id| list (VARCHAR) 
--|------- 
1 | a, b, c 
2 | b, c, d 
3 | a 

我想用單一值從逗號分隔的列表,如其他查詢過濾器。 我以爲我會與查詢實現這個像

SELECT * FROM A WHERE column1 IN (SELECT list FROM B WHERE id = 1) 

但這種方式我用值

a, b, c 

作爲過濾不是,例如,

a 

,我需要一個過濾器。

我該如何做到這一點?

+3

修復你的數據庫結構,所以你不用逗號分隔的字符串存儲列表。 SQL具有存儲列表的很好功能。它被稱爲表格。 –

+0

我不能更改DB結構;) – Miki

+0

什麼數據類型是「List」...設置?如果是這樣的話,你可能需要使用FIND_IN_SET http://dev.mysql.com/doc/refman/5.0/en/set.html或'Like'運算符不是最好的性能,但如果你必須忍受你擁有的。 .. – xQbert

回答

2

一種方法是使用find_in_set()like。這裏是一個例子:

SELECT * 
FROM A a JOIN 
    B b 
    ON b.id = 1 and 
     find_in_set(a.column1, replace(list, ', ', ',')) > 0; 
1

如果你想要你的列表中的第一個值,就像你要求的那樣你就可以這樣做。

SELECT * 
FROM A 
WHERE column1 IN 
(
    SELECT 
     SUBSTRING_INDEX(`list`, ',', 1) 
    FROM B 
    WHERE id = 1 
) 

你可以通過改變SUBSTRING_INDEX數量獲取字符串的任何部分()..

SUBSTRING_INDEX(`list`, ',', 1) -- find first comma and return first part 
SUBSTRING_INDEX(`list`, ',', -1) -- find last comma and return last part 
SUBSTRING_INDEX(`list`, ',', -2) -- find second to last comma and return last part 
SUBSTRING_INDEX(`list`, ',', 2) -- find second to first comma and return first part 
.... etc 
+0

Thx ,但我不想第一個價值,也許我做了糟糕的解釋。我想要列表中列中的任何逗號分隔值。 – Miki

+0

@Miki ok好看看這裏的功能使用.. ive使用它之前和它的幫助http://blog.fedecarg.com/2009/02/22/mysql-split-string-function/ –

+0

@Miki你能發佈你想要的清單結果的樣子? –

相關問題