首页 > 解决方案 > 在 SQL 中,我可以在另一列中获取与它们没有关联的特定值的列中的值吗?

问题描述

假设我有一个包含两列的表:user_guid 和 trait。相同的 user_guid 可以在第二列中以不同的特征出现在表中多次。像这样:

-----------------------
user_guid | trait
-----------------------
a123      | tall
a123      | sings
a123      | blonde
b321      | short
b321      | sings

有没有办法在 trait 列中获取所有没有值“tall”的 user_guid?我正在尝试使用 WHERE NOT EXISTS,但我似乎无法让它工作。

标签: mysqlsqlexists

解决方案


一个简单的方法是聚合:

select user_guid
from t
group by user_guid
having sum(trait = 'tall') = 0;

注意:这不会返回完全没有特征的用户。为此,您需要一个单独的用户表:

select u.*
from users u
where not exists (select 1
                  from t
                  where t.user_guid = u.user_uid and t.trait = 'tall'
                 );

推荐阅读