在 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 中,我可以在另一列中获取与它们没有关联的特定值的列中的值吗?的主要内容,如果未能解决你的问题,请参考以下文章