首页 > 解决方案 > 连接具有相同键的表,第二个表有多个键值,第二个表的行必须具有相同的列值

问题描述

我有两个带有共享密钥的表,我正在尝试加入它们以根据少数条件过滤数据

表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)

标签: sqlsql-server

解决方案


另一种解决方案可能如下:

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'

编辑:我已经更新了我的查询以匹配一个特定的情况,这使得它与另一个答案非常相似。

在此处查找演示


推荐阅读