You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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字段都会是NULL
  • t2.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:26:42