-1

このクエリを変更するにはどうすればよいですか?

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
4

1 に答える 1

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フィドルの例

于 2012-07-09T10:11:31.547 に答える