sql - 连接具有相同键的表,第二个表有多个键值,第二个表的行必须具有相同的列值
问题描述
我有两个带有共享密钥的表,我正在尝试加入它们以根据少数条件过滤数据
表1
id | OutPutValue |
1 | 2019 |
2 | 2018 |
表2
object_id | status | type |
1 | 22 | a |
1 | 22 | c |
1 | 33 | b |
2 | 33 | c |
2 | 33 | c |
2 | 33 | c |
我想要得到的是:它必须'OutPutValue'
从 tbl1 中选择所有,其中 tbl2 列'type'
应该是 c,并且'status'
所有行的列必须具有相同的值,即 33。请注意,tbl1 的主键(id)是外键(object_id ) 在 tbl2 中。
从 tbl1 中选择列,如果 tbl2 中的所有行(tbl1 的 id 在 tbl2 中有多行(基于 object_id))具有相同的status
值,即 33 并且类型应该是'c'。
OutPutValue | Type | status |
2018 | c | 33 |
我尝试了以下解决方案,但没有返回所需的输出:
SELECT a.OutPutValue FROM tbl1 a JOIN tbl2 b ON a.id = b.object_id WHERE b.Type =c
GROUP BY a.OutPutValue, b.status HAVING b.STATUS IN(33)
解决方案
另一种解决方案可能如下:
SELECT T1.id, T1.outputvalue FROM tbl1 T1
JOIN (
SELECT tbl2.*, MAX(type), MAX(status)
FROM tbl2
GROUP BY object_id
HAVING
MIN(status) = MAX(status) AND
MIN(type) = MAX(type)
) T2 ON T1.id = T2.object_id
WHERE T2.type = 'c'
编辑:我已经更新了我的查询以匹配一个特定的情况,这使得它与另一个答案非常相似。
推荐阅读
- c# - IActionContextAccessor 为空
- java - 使用spring boot查询MySQL数据库时,未找到SQL查询返回列'id'
- java - 在 JAVA 中处理 Oracle TO_DATE(1, 'j')
- javascript - 如何防止Chrome中的页面刷新或默认提示框
- postgresql - INSERT INTO 使用格式
- css - 使用 ngStyle 传递 CSS 值
- android - 从 RecyclerView 获取可见和不可见项目
- eclipse - 部署时出现 JavaFX-11 错误:找不到模块
- javascript - 从数组中删除数字并移动剩余的数字
- coldfusion - Coldfusion 更新 5 构建未显示在管理服务器更新页面中