2017-06-12 15 views
1

この問題があります。私は値を外挿したい2つのテーブルを持っています。具体的には、テーブルのフィールドには、2番目のテーブルのIDが区切られています。 この手順の使用:TAB2フィールドにこれらの値(; 2; 3; 4; 1 5)があるので、私はより多くの行を期待して、このクエリからmysql select replace function

SELECT name 
    FROM tab1 
WHERE id in (SELECT REPLACE(field,";",",") as idresult 
       from tab2 
       where tab2.id=1) 

もしあなたがなしで実行と同じ手順置き換えを選択し、私は正しい 結果すなわちを得る::

SELECT name FROM tab1 
WHERE id in (1,2,3,4,5) 

それは正しいです。私はあなたの提案を持って交換を使用する必要がありますか?

+2

これにはFIND_IN_SETを使用できますが、正規化を行うとよいでしょう。 – Strawberry

答えて

0

WHERE句に問題があります。inは値と値のベクトル(列)を比較するために使用されます。あなたの場合、​​がidresultの結果の少なくとも1つと等しいかどうかをチェックします。

しかしidresult文字列だけの列である - 、内部代わりのとなりました。を交換してください。

あなたは、文字列内の部分文字列があるかどうかを見つけるためにMySQL locate functionを使用することができます。

SELECT name 
    FROM tab1, tab2 
WHERE LOCATE(tab2.id, tab2.field)>0 
0

私の理解は、TAB2クエリはあなたTAB1にフィルタとして使用されるべきカンマ区切りの文字列を提供することです。このためには、以下のようにMySQLでFIND_IN_SETコマンドを使用することができます。

select name from tab1 where find_in_set(id, (SELECT REPLACE(field,";",",") from tab2 where tab2.id=1)) > 0; 
+0

はい、いいですよ!ありがとうございました –