3

この単純なサブ選択を拡張したいと思います。

Select * from table1 where pkid in (select fkid from table2 where clause...)

上記のロジックは非常に単純です。WHERE 句を持つサブ選択クエリから返されたサブセットに pkid が含まれている table1 のすべての行を取得します。返されるフィールドが 1 つしかないため、うまく機能します。

今、私はこれを拡張したいと思います。

テーブル 1 で、field1 と field2 と field3 を選択した結果を返したい (field1、field2、field3 from table2 where 句...)

これはどのように可能ですか?

前もって感謝します。

例。

表1

FIELD1  FIELD2 FIELD3    
1       2      3    
2       3      4     
4       5      6

表 2

2       3      4 
4       5      6

2つの結果を返したい。

4

5 に答える 5

6

あなたが何を必要としているのか理解できたら、試してみてください:

SELECT t1.field1, t1.field2, t1.field3 FROM table1 t1
INNER JOIN table2 t2
    ON t1.field1 = t2.field1
   AND t1.field2 = t2.field2
   AND t1.field3 = t2.field3
   AND t2.... // Use this as WHERE condition
于 2012-04-10T14:52:18.507 に答える
1

マルコが指摘したように、あなたがしたいことはINNER JOIN.

しかし(参考までに、Marcoのソリューションを必ず使用する必要があります)、単純にブレースを使用することもできます。

Select * 
from table1 
where (field1, field2, field3) in (select field1, field2, field3 from table2 where clause...)

少なくとも MySQL では (この質問は MySQL でタグ付けされていませんでしたか?)

于 2012-04-10T14:59:17.123 に答える
0

一時テーブルを使用できます

select field1, field2, field3 into #tempTable from table2 where clause...

select * from table 1 
where filed1 in (select field1 from #tempTable)
and filed2 in (select field2 from #tempTable)
and filed3 in (select field3 from #tempTable)
于 2012-04-10T14:52:32.993 に答える
0

INこのようなほとんどの場合、使用を避けてください。それは非常に制限的です。

ほとんどの場合、JOIN を使用することを好みます。

SELECT
  *
FROM
  yourTable
INNER JOIN
  (SELECT c1, c2, c3 FROM anotherQuery) AS filter
    ON  yourTable.c1 = filter.c1
    AND yourTable.c2 = filter.c2
    AND yourTable.c3 = filter.c3

(フィルタが必要に応じてorをc1, c2, c3使用する一意の組み合わせを返すことを確認してください)DISTINCTGROUP BY

于 2012-04-10T14:53:48.770 に答える
0

エンジンについて言及していないので、SQL Server を想定します。このクエリは、両方のテーブルの内容を表示します

select FIELD1, FIELD2 from table1 
intersect
select FIELD1, FIELD2 from table2 
于 2012-04-10T14:55:42.320 に答える