MySQL如何获取t1中不在t2或t2.c3≠1的所有记录?
解决t1记录查询的问题
我明白你的需求啦——你想展示t1的所有记录,只有当某条t1记录在t2中存在且对应的t2.c3等于1时,才把它排除掉。之前的查询没拿到未插入t2的t1记录,大概率是用了内连接(INNER JOIN)或者错误的关联方式,导致只保留了t1和t2有匹配的行。
试试用**左连接(LEFT JOIN)**来实现,它会保留t1的所有行,哪怕t2里没有对应的记录。具体SQL语句如下(记得根据你的实际表关联字段调整ON子句):
SELECT t1.* FROM t1 LEFT JOIN t2 ON t1.关联字段 = t2.对应关联字段 -- 比如t1.id = t2.t1_id,或者t1.name = t2.name WHERE t2.id IS NULL OR t2.c3 != 1;
逻辑解释:
LEFT JOIN t2:确保t1的每一条记录都会被包含在结果里,t2中没有匹配的行,所有t2字段都会是NULLt2.id IS NULL:筛选出那些还没被插入t2的t1记录(因为t2里没这条,所以t2.id是NULL)t2.c3 != 1:筛选出已经在t2里,但t2.c3不等于1的t1记录- 两个条件用
OR连接,就完美覆盖了你要的两种情况
结合你的例子来看:
- 当Casablanca刚被插入t2,
t2.c3不等于1时,它会被保留在结果里 - 当你把Casablanca对应的
t2.c3改成1后,这条记录就会被排除,其他t1记录(不管有没有在t2里)都会正常显示
内容的提问来源于stack exchange,提问作者user9335841
相关产品推荐
相关产品推荐

