2012-02-27 11 views
2

私は、次のクエリの働きを持っている:サブクエリ

SELECT DISTINCT table1.field1, table1.field2 
FROM table1 
WHERE table1.field3 IN (1,2,3) 

結果:

field1 field2 
Data1 60 
Data2 61 
Data3 62 

し、次の問合せは、私だけ、それはまったく同じ結果を与える必要があり、最初の行を提供します最初のクエリ。

SELECT DISTINCT table1.field1, table1.field2 
FROM table1 
WHERE table1.field3 IN (SELECT table2.field1 FROM table2 WHERE table2.field2 = 100) 

結果:

field1 field2 
Data1 60 

私はsubquery (SELECT table2.field1 FROM table2 WHERE table2.field2 = 100)を実行すると、結果は正確に最初のクエリのように、 "1,2,3" です。

私は何が欠けていますか?

+1

サンプルデータを投稿できますか? – Taryn

+0

、あなたの投稿にコピーペーストのクエリ結果、また 'descr'テーブルを貼り付けてください。データを投稿するときにselect句にfield3を含めます。 – danihp

+0

サブクエリは3つの別々の行、またはsngle文字列 '1,2,3'を返しますか? – Mchl

答えて

9

値が'1,2,3'の文字列は3つの整数のリストではありません。それは1つの文字列です。

あなたはx IN (SELECT y FROM z)は、あなたのサブクエリは値12、および3で、3つの項目を返す必要があり、x IN (1,2,3)と同じように動作します。


スプリット()関数は、文字列を取り、複数の整数で構成されるレコードセットを返すWeb上であります。そして、あなたの問題を修正することがあります。

しかし、複数の値を保持する単一のフィールドを持つ単一のレコードがあるという事実は、より深刻な問題の兆候です。リレーショナルデータベースには複数の値を1つの文字列として格納しないでください。代わりに、複数のレコードまたは複数のフィールドを格納します。

+0

あなたは絶対に正しいです、ありがとう。 – Tenza