首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在同一个表的两列中查找值相同的数据

在同一个表的两列中查找值相同的数据
EN

Stack Overflow用户
提问于 2019-06-26 16:24:37
回答 3查看 246关注 0票数 1

因此,我有一个简单的表,其中包含我们提供给客户的商品和用户每天实际使用的商品。

代码语言:javascript
复制
date         |  offered_name  |  used_name  |  h_id
----------------------------------------------------------
2019-06-20   | Obsidian       |  Obsidian   |  100
2019-06-20   | Obsidian       |  Limestone  |  101
2019-06-20   | Limestone      |  Sandstone  |  102
2019-06-21   | Obsidian       |  Limestone  |  100
2019-06-21   | Obsidian       |  Sandtone   |  101
2019-06-21   | Limestone      |  Limestone  |  102

我想找出提供的物品与用过的物品匹配的所有实例。用户可以更改他们的used_item,所以我只关心他们是否至少匹配过一次offered_name。如果它们从未匹配过,那么我就不想选择它们。上面的输出将如下所示:

代码语言:javascript
复制
h_id  | used_offered_item_at_least_once
---------------------------------------
100   | 1 
101   | 0 
102   | 1 

与这个问题类似,SQL - find all instances where two columns are the same,但我想比较两个不同的列,而不是只检查一列。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-06-26 16:51:20

您可以使用conditional aggregation

代码语言:javascript
复制
select h_id,
       cast(sign(sum(case when offered_name = used_name then 
          1 
       else
          0
       end)) as int) as used_offered_item_at_least_once
  from tab
 group by h_id
票数 1
EN

Stack Overflow用户

发布于 2019-06-26 19:17:36

我将使用case表达式编写以下代码:

代码语言:javascript
复制
select id,
       max(case when offered_name = used_name then 1 else 0 end) as used_offered_item_at_least_once
from t
group by id;

我想不出一种更简单的方式来表达逻辑。

票数 1
EN

Stack Overflow用户

发布于 2019-06-26 16:50:05

您可以使用group by和having:

代码语言:javascript
复制
select h_id, count(1) "used_offered_item_at_least_once" from your_table
where offered_name  = used_name
group by h_id
having count(1) = 1 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56768380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档