2012-07-09 92 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