首页 > 解决方案 > 仅当重复列具有相同数据时才获取不同的列

问题描述

我有这种类型的表:

+-----TABLE1----+
| Name, Boolean |
| A   , 0       |
| B   , 0       |
| B   , 0       |
| A   , 1       |
| C   , 1       |
| D   , 0       |
| C   , 0       |
| A   , 0       |
| A   , 1       |
| B   , 0       |
| D   , 0       |
+--------------+

我想选择不同的所有名称,它们的重复布尔值也为 0。所以结果将是:

+---------------+
| RESULT:       |
| Name          |
| B             |
| D             |
+---------------+

因为 A 和 C 也包含“1”的布尔值,所以它们不会被获取

我可以:

SELECT DISTINCT name, MAX(boolean) as boolean FROM table1 GROUP BY name;

但是,如果我只想获取它们的 max(boolean) 为 0 的结果,我需要使用什么条件?

我不能在一个查询中使用两个选择语句,因为我们正在谈论大数据数据库。所以在我的情况下,这个解决方案不是一个选项:

SELECT DISTINCT t1.name FROM table1 t WHERE t1.name NOT IN (SELECT DISTINCT t2.name FROM table1 t2 WHERE t2.boolean = 1);

在使用“JOIN”时也想不出一个选项。

有什么解决办法吗?

提前致谢!:)

标签: mysqlsql

解决方案


您可以使用聚合:

select name
from table1 t
group by name
having min(boolean) = max(boolean);

推荐阅读