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子句,则下次将左连接转换为内部连接,请参见:谢谢!重新。麦克维,也谢谢你,并注意到。非常感谢你的可能的副本!它很有魅力,比我想说的更有意义。你为什么回答这么明显的常见问题?