2017-07-04 8 views
0

効率的なSQL文を実行したいが、正しくクエリを構築する方法がわからない。2つのSQL文が1つのSQL内でのみ

私は、次の表を持っている:t2から

t1(user_id, test_id, module_id, save_id) 
t2(save_id, answer_id) 

save_idがt1.save_id

の外部キーであるので、いくつかのエントリ:

T1: 
1, 3, 4, 40 
1, 5, 33, 80 
2, 5, 33, 90 
2, 6, 7, 82 
T2: 
80, A2 

は、だから今、私はすべてのuser_idsをしたいとtest_id = 3とmodule_id = 4のエントリを持つanswer_idの値(これらのユーザーのみ!)。検索された回答の値は常にtest_id = 5とmodule_id = 33であり、唯一の変数は答えのsave_idです。私は、これは通常のJOINを介してリンクすることができますが、どのように私はtest_id = 3とmodule_id = 4でエントリが存在するために、ユーザーのみを分離することができます。この例では、test_id = 3およびmodule_id = 4のnochエントリがあるため、ユーザ1を取得したいだけです。ユーザ2は関連性がありません。

+2

ちょうど参加し、あなたのwhere句を追加します。それはまったくの魔法です;) – Ben

+0

私はAndreasがSQLの初心者だと思います。 Andreas、GoogleでINNER JOINとLEFT OUTER JOINを検索すれば、あなたが望むものを手に入れることができます。ベンと同じように、それはすべての魔法です。 :) – Peter

答えて

0

ただ、これを試してみてくださいあなたの参加Select * FROM Table1 t1 JOIN Table2 t2 ON t1.id = t2.t1_id WHERE t1.foo = "bar" AND t2.bar = "foo";

+0

私はこれが答えだとは思わない。 INNER JOINを実行すると、各ユーザーをT2のanswer_idにマップします。この後、私はWHERE t1.test_id = '5'とt1.answer_id = '33 'を計算すると、すべてのユーザーを再び取得しますが、t1.test_idのエントリも持つユーザーのみが必要です= '3' AND t1.module_id = '4'(ここでの答えは無関係なので、追加の結合はありません)。分かりますか? –

0

にwhere句を追加します。

SELECT 
t1.user_id 
,t2.answer_id 
FROM t1 
LEFT JOIN t2 ON t1.save_id=t2.save_id 
WHERE t1.test_id=3 
AND t1.module_id=4; 
関連する問題