2017-03-24 21 views
0

このINNER JOINクエリを逆にしようとしています。私はこの方法を試してみました(試みとしてこれを試してみました)しかし、あなたは、このいくつかの方法を行うことができ内部結合クエリを逆にする

SELECT users.*, 
user_activations.user_id as user_ID 
FROM users 
INNER JOIN user_activations ON 
user_activations.user_id = users.ID 
WHERE user_activations.user_id IS NULL 
+0

代わりにLEFT OUTER JOINを使用して、すべてのレコードを 'users'から取得し、' user_Activiations'からのレコードのみを取得します。クエリの他のすべては、要件に合わせて100%正確です。 – JNevill

答えて

0

を失敗した検証テーブル内

をフィールドを持っていけないすべてのアカウントを選択します。コードを短縮するためにSQLエイリアスを使用することに注意してください。

1) ANTI-JOIN

SELECT 
    u.* 
FROM users u 
LEFT JOIN user_activations ua ON 
    ua.user_id = u.ID 
WHERE ua.user_id IS NULL 

2と呼ばれるuser_activations PK(またはnullでない列)にIS NULL条件で使用LEFT JOIN使用NOT EXISTS

SELECT 
    u.* 
FROM users u 
WHERE NOT EXISTS (
    SELECT * 
    FROM user_activations ua 
    WHERE ua.user_id = u.ID 
) 

(1)オプションでは、別のJOINとWHERE条件を組み合わせて使用​​していますが、これはジョイン全体に適用されますINNER JOINと一致する行を効果的に削除します。

(2)オプションでは、矛盾したEXISTS演算子があります。この演算子は、WHERE句に基づいて一致する行が見つかると出力から破棄します。

+0

ありがとう!シャムのように動作します –

+0

@TomislavNikolicあなたの魔法を引き継ぎます!それがあなたを助けた場合は、回答を受け入れることを検討してください。 –

+0

もう一度、ありがとうございます。私はそうします:)ちょうど1-2分ほど待ってから –

関連する問題