首页 > 解决方案 > 如何在mysql中形成连接查询以根据某些状态条件过滤记录

问题描述

考虑我有表 t1

ID 另一个标题
1 第 1 行
2 第 2 行
3 第 3 行
4 第 4 行

和另一张桌子 t2

ID t1_id 地位
1 1 PG
2 2 小号
3 1 CG
4 1 小号
5 3 CG

t1 与 t2 有 one2many 关系。

t1_id 在 t2 表中有多个条目,因为 t2 的状态序列像 PG > CG >S一样继续。

所以它可以为它通过的每个状态有单独的条目。

一旦它达到状态 S,我们不应该选择该 t1_id,即使它具有任何先前的状态,如 PG 或 CG

我想做 left join like t1 left join t2 based on t1 id 而另一个条件,如 t2 的状态不应该有S

所以预期的结果应该是

t1_id 地位
3 CG
4 无效的

我怎样才能做到这一点?提前致谢

标签: mysqlmysql-5.7

解决方案


首先检索状态“S”存在的 t1_id,如果表中存在该 t1_id 的任何其他状态信息,则从查询中忽略那些 t1_id。

-- MySQL (v5.7)

SELECT t.id t1_id, p.status
FROM t1 t
LEFT JOIN t2 p
       ON t.id = p.t1_id
WHERE NOT EXISTS (SELECT 1
                  FROM t2
                  WHERE t1_id = t.id AND status = 'S');

请从网址https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=2a38e8a8696b68c15f8e95a28f244c86检查


推荐阅读