2016-08-31 7 views
0

私は少し新しく結合するので、これが可能かどうかはわかりません。私は私が必要なもの...MySQLを既存のNOT JOINに変換する

いくつかのことをグーグルとしようとしてきた。ここで、user2data.user_id =「X」に対応するuser2data.user_idが

存在しない

選択data.idを

エキサイティングな権利ですか? :Dどのような作品

SELECT * FROM data WHERE NOT EXISTS (SELECT * FROM user2data WHERE user2data.user_id=1 AND user2data.data_id=data.id) LIMIT 100; 

しかし、それはすべての3つの列がインデックス化されていても、遅いです。私はこの目的のために別のSO答えからOUTER JOINを試しましたが、それは上記よりもずっと遅いです。私が必要とするのは、INNER JOINです。

これが実際に可能かどうか、またはインデックスを利用する代替方法がある場合は教えてください。

おかげで、最高の

+1

に参加使用することができるのだろうが、私は ''(user_idは、DATA_ID)以上user2data' 'の*複合*指数をお勧めしたいです。 – eggyal

+0

存在しないデータに対して内部結合を実行することはできません。 – shawnt00

+0

結合している列が索引付けされていることを確認してから、外部結合が高速になるようにしてください。 – Barmar

答えて

0

あなたは左

SELECT * 
FROM data WHERE 
LEFT JOIN user2data ON ( user2data.user_id=1 AND user2data.data_id=data.id) 
where user2data.data_id is null 
LIMIT 100; 
+0

彼はこれを試してみました:*この目的のためにOUTER JOINを試しました。* – Barmar

+0

@BarmarあなたはOPが外部結合を使って言及したことに同意します。しかし、OPが上記のような正しい結合条件を思いついたのかどうかも疑問です。 – shawnt00

+0

彼は別のSOの答えからそれを得たと言った。別のテーブルと一致しないすべての行を取得する方法については、多くのSOの質問があります。 http://stackoverflow.com/questions/21633115/return-row-only-if-value-doesnt-exist?lq=1 – Barmar

関連する問題