2017-11-26 5 views
0

私はこのMySqlクエリに苦労しています。many-to-many mysql検索ではないチームを探しています


私は3つのテーブルを持っています。

member 
idMember memberEmail 
1  [email protected] 
2  [email protected] 
3  [email protected] 

team 
idTeam teamName 
1  King 
2  Lion 
3  Cat 

teamMember 
idMember idTeam 
1  1 
2  1 
3  2 
3  3 

idMemberが登録されていないチームを返すクエリが必要です。 例:idMember 1、チーム2と3で再登録されていません。

お待ちしています

答えて

0

多分このようなものでしょうか?

SELECT * FROM [team] T 
WHERE NOT EXISTS (SELECT 1 FROM teamMember TM WHERE idMember = [1] AND T.idTeam = TM.idTeam) 

[team]を2番目のテーブル(チームID、名前)の名前と[1]を検索するidメンバーに置き換えます。

+0

Stephanieありがとうございますが、そのクエリは空のテーブルを返します。 –

+0

おっと!チームが同等の条件を追加するのを忘れてしまった。私はテーブルのエイリアスにも追加しました。 – Stephanie

+0

これは魔法です!どうもありがとうございました! –

0

あなたは、特定のidmemberあちこち探している場合:

select t.idTeam 
from team t 
where not exists (select 1 
        from teamMember tm 
        where tm.teamId = t.teamId and tm.memberId = 1 
       ); 

これは相関サブクエリと呼ばれています。あなたはnot inと似たような操作を行うことができます。

select t.idTeam 
from team t 
where t.idTeam not in (select tm.idTeam 
         from teamMember tm 
         where tm.memberId = 1 
        ); 

しかし、not existsが原因not inは、サブクエリでnull値を処理する方法が望ましいです。

+0

Mr. Linoff、Stephanieからの答えがこのトリックでした! –

+0

@PatriceCarle。 。 。私が質問に答えたときのStephanieの答えは正しくありませんでした。 –

+0

私はそれを非常に残念に思っていますが、Imは本当にあなたの答えのgreatfullです。速い返信をいただきありがとうございます。 –

関連する問題