SELECT DISTINCT a.value
FROM a LEFT JOIN b
ON a.value = b.value
AND (b.field IS NULL OR b.field != 'my_string');
SELECT a.value
FROM a
WHERE a.value NOT IN
(SELECT value
FROM b
WHERE b.field = 'my_string');
从我读过的内容中,做一个左连接更快。但我也读过DISTINCT是低效查询的代码异味。如何确定哪种查询在最坏情况下性能更好?选择不在另一个表中的行
编辑:对不起,id不是主键,它只是另一个字段。我会用价值取代它。
EDIT2:看起来每个人都挂了我的第一个查询。我们假设它看起来像这样。逻辑不一样吗?
SELECT DISTINCT a.value
FROM a LEFT JOIN b ON a.value = b.value
WHERE (b.field IS NULL OR b.field != 'my_string');
EDIT3:样品小提琴。 http://sqlfiddle.com/#!2/500ea/1
EDIT4:接受的答案。 http://sqlfiddle.com/#!2/500ea/8
忍者在写同样的回复+1 – 2014-11-05 23:27:27
你说得对。谢谢。 http://sqlfiddle.com/#!2/500ea/8 – Tuan 2014-11-06 00:20:09