Mysql SQL查询中不需要的结果

Mysql SQL查询中不需要的结果,mysql,left-join,Mysql,Left Join,这看起来应该是一个非常简单的问题,但我在过去两天一直在寻找答案,却找不到答案。请帮忙 我有两张桌子 texts.text_id, texts.other_stuff... pairs.pair_id, pairs.textA, pairs.textB 第二个表定义了来自第一个表的条目对 我需要的是与普通的左连接查询相反的查询,如: SELECT texts.text_id FROM texts LEFT JOIN text_pairs ON texts.text_id = t

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

我有两张桌子

texts.text_id, texts.other_stuff...
pairs.pair_id, pairs.textA, pairs.textB
第二个表定义了来自第一个表的条目对

我需要的是与普通的左连接查询相反的查询,如:

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 
如何以方式将与给定文本b配对的文本排他地?我试过了

WHERE text_pairs.textB != 123 OR WHERE text_pairs.textB IS NULL
但是,这将返回textB不是123的所有对。所以,在这样的情况下

textA   TextB
1         3
1         4
2         4

如果我要求发短信,B!=3,查询返回1和2。我需要一些能给我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 ;
此逻辑通常使用
不存在
不存在
表示:

select t.*
from texts t
where not exists (select 1
                  from text_pairs tp
                  where t.text_id = tp.textA AND tp.textB = 123 
                 );

使用LEFT JOIN,您需要在ON子句中进行筛选,而不是在WHERE子句中进行筛选。。。如果使用WHERE子句,则下次将左连接转换为内部连接,请参见:谢谢!重新。麦克维,也谢谢你,并注意到。非常感谢你的可能的副本!它很有魅力,比我想说的更有意义。你为什么回答这么明显的常见问题?