私は2つのテーブルを持っています。offers
とoffer_status
。行が欠落しているか、そのテーブルの列が 0offers
の行を返したい。offer_status
disabled
これが私がそれをやろうとした方法です:
SELECT offers.id,network,campid,name,url FROM offers
LEFT JOIN offer_status ON offers.id = offer_status.sql_id
AND offer_status.user_id='3'
WHERE country='US'
AND offer_status.disabled != '1'
ORDER BY epc DESC LIMIT 7
ただし、行がoffer_status
存在しない場合 (および JOIN が失敗する場合)、これは機能しません。offer_status.disabled が null であるため、私にはまだ機能するはずです。
これは機能します:
SELECT offers.id,network,campid,name,url FROM offers
LEFT JOIN offer_status ON offers.id = offer_status.sql_id
AND offer_status.user_id='3'
WHERE country='US'
AND (offer_status.disabled IS NULL OR offer_status.disabled=0)
ORDER BY epc DESC LIMIT 7
しかし、私にはこれはパフォーマンスの点で悪いように思え、当初の考えがうまくいかなかったことにまだ失望しています.
上記の OR ステートメントはこれを行う唯一の方法ですか? より良い方法はありますか?