我有一个SQL查询,它执行大部分我需要的操作,但我遇到了一个问题。SQL查询来检查值是否在另一个表中不存在
共有3张桌子。 entries
,entry_meta
和votes
。
我需要在entry_meta
表和ID无论是从entries
时competition_id = 420
得到一个整行votes
不存在,或者它确实存在,但user_id
列的值不是1
这里的查询我正在使用:
SELECT entries.* FROM entries
INNER JOIN entry_meta ON (entries.ID = entry_meta.entry_id)
WHERE 1=1
AND ((entry_meta.meta_key = 'competition_id' AND CAST(entry_meta.meta_value AS CHAR) = '420'))
GROUP BY entries.ID
ORDER BY entries.submission_date DESC
LIMIT 0, 25;
投票表有4列。 vote_id,entry_id,user_id,值。
我想到的一个选项是SELECT entry_id FROM votes WHERE user_id = 1
,并将其包含在我的查询中的AND
子句中。这是可接受的/有效的吗?
E.g.
AND entries.ID NOT IN (SELECT entry_id FROM votes WHERE user_id = 1)
你试过了吗?它看起来很合理,虽然你可能想阅读[NOT EXISTS vs NOT IN](http://stackoverflow.com/questions/2246772/whats-the-difference-between-not-exists-vs-not-in-vs -left-join-where-null-null) – Andrew
完美地工作!谢谢安德鲁。有时实际上写下问题来解释它澄清解决方案:) –