mysql - 如何在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 | 无效的 |
我怎样才能做到这一点?提前致谢
解决方案
首先检索状态“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检查
推荐阅读
- python - 基于多个列值创建列
- python - 如何使用python获取标签值
- python - 数据框中的Python for循环
- java - Java - 有条件地显示空值 xml 标记
- c# - 尝试在 C# 中生成按钮
- python - 为什么 str.contains() 没有返回正确的结果?
- r - 在R中将全名与反向匹配
- magento2 - 我在哪里可以找到所有可以在 pages/blocks/cms 内容中使用的 {{ codes }}?
- python - Python循环数据框并在IF中添加2个条件以达到最终索引并增加它返回错误
- pid - 启动后无法打开 PID 文件 /var/run/teamviewerd.pid(还没有?):没有这样的文件或目录