在 SQL 中,我可以在另一列中获取与它们没有关联的特定值的列中的值吗?

Posted

技术标签:

【中文标题】在 SQL 中,我可以在另一列中获取与它们没有关联的特定值的列中的值吗?【英文标题】:In SQL, can I get the values in one column that don't have a certain value associated to them in another column? 【发布时间】:2020-12-16 16:49:59 【问题描述】:

假设我有一个包含两列的表: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,但我似乎无法让它工作。

【问题讨论】:

【参考方案1】:

一种简单的方法是聚合:

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'
                 );

【讨论】:

【参考方案2】:

您可以在NOT EXISTS中使用相关子查询

SELECT DISTINCT t1.user_guid
FROM yourTable AS t1
WHERE NOT EXISTS
    (SELECT 1 FROM yourTable AS t2
     WHERE t2.user_guid = t1.user_guid AND t2.trait = 'tall')

或者你可以使用自加入

SELECT DISTING t1.user_guid
FROM yourTable AS t1
LEFT JOIN yourTable AS t2 ON t1.user_guid = t2.user_guid AND t2.trait = 'tall'
WHERE t2.user_guid IS NULL

【讨论】:

以上是关于在 SQL 中,我可以在另一列中获取与它们没有关联的特定值的列中的值吗?的主要内容,如果未能解决你的问题,请参考以下文章

在另一列中使用一列中的值

Pandas,对于一列中的每个唯一值,在另一列中获取唯一值

SQL:在一个列中查找在另一列中也不唯一的非唯一记录

试图在另一列中填写州名

在另一列上查找最近的时间戳并在新列中添加值 PySpark

如何在 Hive SQL 中对一列中的数据进行分组并将其分布在另一列中?