IN SQL运算符

时间:2012-07-09 09:57:50

标签: 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

1 个答案:

答案 0 :(得分: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

上的示例