SQL - 如何搜索具有不同列的双发生记录?

Posted

技术标签:

【中文标题】SQL - 如何搜索具有不同列的双发生记录?【英文标题】:SQL - how to search for double occuring record with different column? 【发布时间】:2019-02-28 18:31:03 【问题描述】:

这里是 SQL 新手。我有一个看起来像这样的表:

我想获取记录的 product_id,它们在表中出现两次:一个带有 variant_id X,variant_id Y。在显示的屏幕截图中,结果将是 product_id = 5106(因为它存在两个 variant_id = 19607 和 19608) .

但是,我不知道该怎么做。我尝试使用语句 WHERE variant_id IN(19607,19608),但它返回任何设置了这些 ID 之一的记录。我也试过 WHERE variant_id = 19607 AND variant_id = 19608,但它什么也没返回(很容易理解,因为一条记录不能有两个 variant_id)。

我应该使用什么 SQL 关键字?或者我需要这些的特殊组合?非常感谢您的回答!

【问题讨论】:

【参考方案1】:

你可以做聚合:

select product_id
from table t
where variant_id in (19607, 19608)
group by product_id
having min(variant_id) <> max(variant_id);

如果你想要所有列,那么你可以使用exists

select t.*
from table t
where exists (select 1 from table t1 where t1.product_id = t.product_id and t1.variant_id  = 19607) and
      exists (select 1 from table t1 where t1.product_id = t.product_id and t1.variant_id  = 19608);

【讨论】:

【参考方案2】:

我认为这是你想要的:

select product_id
from t
where variant_id in (19607, 19608)
group by product_id
having count(distinct variant_id) = 2;

【讨论】:

哦,我必须使用“有”关键字!这就是我错过的。非常感谢,它成功了:)

以上是关于SQL - 如何搜索具有不同列的双发生记录?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取具有相同app_id列但不同手机号码列的下一条记录

如何使用 SSMA(用于访问 SQL Server)将具有不同列的表迁移到现有表中?

如何使用具有两列的 Hive sql 滞后函数?

一个表上具有不同列的 SQL 连接

SQL如何查询出某一列中不同值出现的次数?

如何检索表的值以获取sql中两列的最大值