クエリの現在の形式では、サブクエリには外側のクエリに関連付けるために何も含まれていないad_title.items_id NOT IN (...)
ため、サブクエリで使用する必要がありますNOT EXISTS
WHERE
SELECT
/* Don't actually SELECT * in a JOIN query. Be explicit about the needed columns */
/* especially since you have item_id in all tables */
t.*,
l.*
FROM
ad_title t
JOIN items l
ON ( l.item_id= t.item_id
AND l.accounts LIKE '%myaccount@email.com%' )
WHERE
/* Find item_id via NOT IN */
t.item_id NOT IN (
SELECT q.item_id
FROM posted_ads q
WHERE q.acc_used = 'myaccount@email.com'
)
として機能させるにNOT EXISTS
は、サブクエリを外部クエリに関連付ける必要があります。
WHERE NOT EXISTS (
SELECT q.item_id
FROM posted_ads q
WHERE
q.acc_used = 'myaccount@email.com'
/* Need relation to the outer query */
AND q.item_id = l.item_id
)
LEFT JOIN
しかし、これはで を探して でNULL
行うこともできますposted_ads
。これが最も効率的な方法です。
SELECT
/* Don't SELECT * in a JOIN query. Be explicit about the needed columns */
t.*,
l.*
FROM
ad_title t
JOIN items l
ON ( l.item_id= t.item_id
AND l.accounts LIKE '%myaccount@email.com%' )
LEFT JOIN
posted_ads q
ON l.item_id = q.item_id
AND q.acc_used = l.accounts
WHERE
/* NULL in the posted_ads table means it doesn't exist there */
posted_ads.item_id IS NULL