2

私は2つのテーブルを持っています。最初のものは型を保持し、2 番目のものはこの型の値を保持します。私の例では、「first_name」として「john」という値がさらにある場合、次のようになります。single-row subquery returns more than one row

SELECT DISTINCT id FROM name WHERE id=(
 SELECT id FROM name WHERE text1='first_name' INTERSECT
 SELECT name_id FROM value WHERE text2='john');

私はSQLがあまり得意ではありません。またはそのようなものを使用する必要がLEFT JOINありますが、これをどのように行うべきかは明確ではありません。

4

4 に答える 4

3

subquery [can] は複数の値を返すINため、=

SELECT DISTINCT id 
FROM name 
WHERE id IN (
        SELECT id FROM name WHERE text1='first_name' 
        INTERSECT
        SELECT name_id FROM value WHERE text2='john');

INは に相当しORます。例:

SELECT *
FROM tableName
WHERE a = 4 or a = 5 or a = 6

次のように書くことができます

SELECT *
FROM tableName
WHERE a in (4,5,6)

(=等号) は、単一の値を割り当てるために使用されます。

于 2012-05-21T08:17:17.370 に答える
1

単純な修正(id =の代わりにINを使用)とは別に、クエリのやや単純なバージョンを使用することもできます。

SELECT DISTINCT id FROM name WHERE text1='first_name' 
and id in (
SELECT name_id FROM value WHERE text2='john')
于 2012-05-21T08:14:52.143 に答える
0

WHEREid=をWHEREidINに変更するだけです。

于 2012-05-21T08:14:20.513 に答える
0
SELECT id FROM name WHERE text1='first_name' INTERSECT
SELECT name_id FROM value WHERE text2='john');

このクエリは複数の行を返すため、INここのような句を使用する必要があります

SELECT DISTINCT id FROM name WHERE id IN (
SELECT id FROM name WHERE text1='first_name' INTERSECT
SELECT name_id FROM value WHERE text2='john');

または、行のみが必要な場合は、DB のロジックと動作を確認する必要があります。

于 2012-05-21T08:10:13.600 に答える