非查询

时间:2017-09-01 13:14:44

标签: mysql left-join

这看起来应该是一个非常简单的问题,但我一直在寻找过去两天的答案而找不到它。请帮忙!

我有两个表格

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的东西。

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 EXISTSNOT 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 
                 );