2016-08-31 18 views
0

sqlクエリの結果を使用し、その結果に基づいて別のクエリを送信したいとします。サブクエリの結果を別のsql selectに使用するにはどうすればよいですか?

Exmaple(もちろん本物のクエリがより複雑である):

table1: name, age 
table2: name, age, field1, fieldN 

まずクエリ:

select name, age from table1 where age > 18. 

今私は複数に一致するtable2のからすべてのエントリを検索したい最初のクエリの結果のフィールド。

重要な注記:の完全な一致があるテーブル2の行を取得したいとします。

どのようにですか? MS SQLサーバに基づいて

+0

@shravster私は、最初の結果クエリのいずれかのフィールドに一致したいと思います。私の例では、名前+年齢。だから私は両方の名前+年齢が1つの行で一致する行を検索したいと思います。そして、クエリ1の完全な結果を繰り返します。 – membersound

+2

あなたの質問を編集し、そのデータに基づいてサンプルデータと予想される出力を追加します。 [_Formatted_](http://stackoverflow.com/editing-help#code)**テキスト**お願い、[スクリーンショットなし](http://meta.stackoverflow.com/questions/285551/why-may-i 285557#285557) –

答えて

0

クエリビルド

select t1.* 
from table1 as t1 
join table2 as t2 on t1.name=t2.name and t1.age=t2.age 
where t2.age > 18 
+0

いいえ、query1の結果のタプルが一致するtable2の完全な行を選択したいと思います。 – membersound

+0

は現在、あなたのポイントを取得できませんでしたが、私はあなたの答えは 選択T1以下の通りだと思います。* をTABLE1からT1 がt1.name = t2.nameとt1.age = t2.age 上t2とtable2のに参加してt2.age> 18 –

0

あなたは自動的に列名の一致に基づいて、参加したい場合は、NATURAL JOINを使用することができます。今すぐ

WITH query1 AS (
    SELECT age, name FROM table1 WHERE age > 18 
) 
SELECT age, name, t2.field1, t2.fieldN 
FROM table2 t2 NATURAL JOIN query1; 

NATURAL JOINが一般的である一方、スキーマ変更のためにあなたのクエリが簡単にブレーキをかけることができるため、それは本当に弱いので、推薦されません。手書きのアドホッククエリ、または上記のような列を明示的に使用できるクエリのためには問題ありません。いずれの場合も、私はそれに対して助言すると、共通のスタイルを結合を使用:

WITH query1 AS (
    SELECT age, name FROM table1 WHERE age > 18 
) 
SELECT t2.age, t2.name, t2.field1, t2.fieldN 
FROM table2 t2 JOIN query1 q1 ON t2.age = q1.age AND t2.name = t1.name; 
0

今、私はしたいと思います:

  • は、表2から複数の一致
  • すべてのエントリを検索します結果のフィールド
  • 最初のクエリの

SELECT *   -- find 
FROM table2 t2 -- from t2 
WHERE EXISTS (
    SELECT * FROM table1 t1 
    WHERE t1.name = t2.name -- that match 
    AND t1.age = t2.age  -- Huh? "multiple matching fields" ? 
    AND t1.age > 18   -- with the same condition 
    ); 
0

は、実はこれは私が探していたものですが、任意の助けてくれてありがとう:

select * from table2 where (name, age) IN (
    select name, age from table1 where age > 18 
) 
+0

私は分かりませんが、もしそうなら、私はこの解決法をより明確に読んでいるので、この解決策を見過ごしてしまいます。 – membersound

関連する問題