首页 > 解决方案 > 获取具有跨多行的其他列值组合的列值

问题描述

我必须编写一个查询来检索“名称”和“id”的组合等于“名称”和“id”的特定值的“品牌”列表。

+--------+-------+-----+
| brand  | name  | id  |
+--------+-------+-----+
| brand1 | david | 123 |
| brand1 | john  | 456 |
| brand1 | adam  | 789 |
| brand2 | david | 123 |
| brand2 | stacy | 999 |
+--------+-------+-----+

例如,我想要所有具有匹配行的品牌

name = "david", id = 123 and 
name = "john", id = 456

在上表中,“brand1”的行包含“name”和“id”这两种组合。

-- desired result
+--------+
| brand  |
+--------+
| brand1 |
+--------+

“Brand2”有“name = david, id = 123”,但没有“name = john, id = 456”,所以我不想要它。

标签: sql

解决方案


您可以使用聚合和having

select brand
from t
where (name = 'david' and id = 123) or
      (name = 'john' and id = 456)
group by brand
having count(distinct name) = 2;

推荐阅读