2012-07-09 114 views
-1

如何修改此查詢?IN SQL運算符

SELECT column_a, 
    (SELECT GROUP_CONCAT(column_b) 
    FROM table_b 
    WHERE column_b IN (main_tbl.column_a)) AS alias_a 
FROM table_a main_tbl 

假設column_a的值爲1,2,3。

上述查詢的輸出與此類似:

SELECT column_a, 
    (SELECT GROUP_CONCAT(column_b) 
    FROM table_b 
    WHERE column_b IN ('1,2,3')) AS alias_a 
FROM table_a main_tbl 

我需要的是:

SELECT column_a, 
    (SELECT GROUP_CONCAT(column_b) 
    FROM table_b 
    WHERE column_b IN (1,2,3)) AS alias_a 
FROM table_a main_tbl 

回答

3

首先,你應該強烈考慮修改表結構。我看不到有任何理由將整數列表作爲字符串存儲在關係數據庫中,這就損害了關係數據庫的重要性。

但是,您可以使用LIKE來解決此問題。

SELECT column_a, 
    (SELECT GROUP_CONCAT(column_b) 
    FROM table_b 
    WHERE CONCAT(',', main_tbl.column_a, ',') LIKE CONCAT('%,', column_b, ',%')) AS alias_a 
FROM table_a main_tbl 

不理想,但它的工作原理。 SQL Fiddle

+0

+1對於「考慮修改」 – 2012-07-09 10:14:40