2017-02-28 7 views
0

Iは、2つのテーブル(T1 & T2)を有するように、それを使用したい:結果は配列であり、Iは、別の選択 "の場合に"

T1を

name | code   

ee | 123, 124, 125 

ef | 121, 123  
______________________ 
(2列目は、配列です)

T2

code_id | code_desc 

121  | xxxxx   

123  | yyyyyyy  

124  | xxxxxxxx 

私はこのクエリを実行する場合、すべてがOKである:(121122)でcode_id

T2から

SELECT *が、私はこのクエリを実行する場合、私はNULLセル/ FROM

SELECT *を結果として得ましたt2 where code_id in(SELECT code FROM t1 where name = ee

2つのテーブルからすべての情報を取得するにはどうすればよいですか?ここで

はコードですが、私はあなたがfind_in_set機能を使用することができます良いSQLオンラインツール

CREATE TABLE t1 (name VARCHAR(200), codes VARCHAR(200)); 
CREATE TABLE t2 (codes_id VARCHAR(200), codes_desc VARCHAR(200)); 

INSERT INTO t1 (name, codes) VALUES ('ee', '123,124,125'); 
INSERT INTO t1 (name, codes) VALUES ('ef', '121,124'); 
INSERT INTO t1 (name, codes) VALUES ('eh', '123,124,125'); 
INSERT INTO t2 (codes_id, codes_desc) VALUES ('121', 'yyyyyyyyy'); 
INSERT INTO t2 (codes_id, codes_desc) VALUES ('122', 'xxxxxxxxx'); 
INSERT INTO t2 (codes_id, codes_desc) VALUES ('123', 'zzzzzzzzzzz'); 



SELECT * FROM t2 where code_id in (121,122) 
SELECT * FROM t2 where code_id in (SELECT codes FROM t1 where name = 'ee') 

答えて

0

を見つけるカント:私はあなたのテーブル構造を正常化するためにあなたをアドバイスします

select * 
from t2 
where exists (
     select 1 
     from t1 
     where name = 'ee' 
     and find_in_set(t2.code_id, t1.code) > 0 
     ) 

を。上記のクエリが機能しているにもかかわらず、それは非sargableです。

関連する問題