这看起来应该是一个非常简单的问题,但我一直在寻找过去两天的答案而找不到它。请帮忙!
我有两个表格
texts.text_id, texts.other_stuff...
pairs.pair_id, pairs.textA, pairs.textB
第二个表定义了第一个表中的条目对。
我需要的是普通LEFT JOIN查询的反向,如:
SELECT texts.text_id
FROM texts
LEFT JOIN text_pairs
ON texts.text_id = text_pairs.textA
WHERE text_pairs.textB = 123
ORDER BY texts.text_id
如何完全 不与给定textB配对的文字?我试过了
WHERE text_pairs.textB != 123 OR WHERE text_pairs.textB IS NULL
然而,这会返回所有 textB不是123的对。所以,在类似
的情况下textA TextB
1 3
1 4
2 4
如果我要求 textB!= 3 ,则查询返回1和2.我需要一些能给我1的东西。
答案 0 :(得分:1)
第二个表的比较在 ON 子句中。然后添加条件以查看是否没有匹配项:
SELECT t.text_id
FROM texts t LEFT JOIN
text_pairs tp
ON t.text_id = tp.textA AND tp.textB = 123
WHERE tp.textB IS NULL
ORDER BY t.text_id ;
此逻辑通常使用NOT EXISTS
或NOT IN
:
select t.*
from texts t
where not exists (select 1
from text_pairs tp
where t.text_id = tp.textA AND tp.textB = 123
);