2016-07-26 4 views

答えて

1

一つの方法をサブクエリを使用せずに、クエリに参加するに次のクエリを変換してくださいon followers。保持されるレコードの基準は、ユーザー登録IDが'3'ではなく、サブクエリの結合内のレコードがfollowersと一致しないということです。

SELECT t1.id, t1.name, t1.avatar, t1.slug, t1.location 
FROM user_registration t1 
LEFT JOIN 
(
    SELECT f.user_id 
    FROM followers f 
    WHERE f.follower_id = '3' 
) t2 
    ON t1.id = t2.user_id 
WHERE t1.id <> '3' AND t2.user_id IS NULL 
ORDER BY t1.id 

私はは、次のクエリでも動作するはずだと思う

SELECT t1.id, t1.name, t1.avatar, t1.slug, t1.location 
FROM user_registration t1 
LEFT JOIN followers t2 
    ON t1.id = t2.user_id AND t2.follower_id = '3' 
WHERE t1.id <> '3' AND t2.user_id IS NULL 
ORDER BY t1.id 
+0

空のレコードが見つかりました。 –

+0

@AnkitVirani申し訳ありませんが、私は 'ON'節を省いています。もう一度やり直せますか? –

+0

ありがとうございました:) –

0
SELECT u.id, u.name, u.avatar, u.slug, u.location 
FROM user_registration as u 
LEFT JOIN followers ON followers.follower._id = u.id 
AND u.id <>'3' 
0

これは

SELECT u.id, u.name, u.avatar, u.slug, u.location 
    FROM user_registration u LEFT JOIN followers f 
    ON u.id=f.user_id 
    WHERE u.id <>'3' AND f.follower_id <>'3' 
    order by u.id; 
+0

このクエリでは、古いスタイルのANSI 92より前の構文を使用していますが、これは多くの人が推奨していません。 –

+0

編集結果 – DharmasriS

1

を働くかもしれないここでサブを使用していないジョイン・クエリです選択:

SELECT 
    u.id, u.name, u.avatar, u.slug, u.location 
FROM 
    user_registration u 
    LEFT JOIN followers f ON (u.id = f.user_id AND f.follower_id = 3) 
WHERE 
    u.id <>'3' AND 
    f.user_id IS NULL 
ORDER BY id 

サブセレクトを使用すると(他のいくつかの回答と同様に)、結果に参加しても、MySQLは引き続きジョインを実行する内部テンポラリテーブル(インデックスがない)を使用している可能性が高いことに注意してください。実際の表を結合すると、既存の索引を使用して結合するすべてのメリットが保持されます。 EXPLAINを実行して、どのインデックスが使用されているかを確認することができます。

+0

ありがとうございました:) –

+0

PhpMyadminでEXPLAINを有効にするにはどうすればいいですか? –

関連する問題