首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >比较两个表并找出缺少的组合

比较两个表并找出缺少的组合
EN

Stack Overflow用户
提问于 2018-08-27 18:14:20
回答 1查看 140关注 0票数 0

我的主桌子上有三列。

  1. 得分( 0-99,100-110)
  2. 比率(5-9 ,10-15)
  3. 地点(A、B)

我有所有的组合(2 *2*2=8组合)

下面是我主表中的组合

代码语言:javascript
运行
复制
score     rate   location
----------------------------
 0-99      5-9     A
100-110    5-9     A
 0-99     10-15    A
100-110   10-15    A
0-99       5-9     B
100-110    5-9     B
0-99      10-15    B
100-110   10-15    B

我有另一张有实际数据的桌子。我想找出实际表格中缺少的所有组合。如何找到这些缺失的组合并将其附加到列中值为“0”的实际表中?

实际数据

代码语言:javascript
运行
复制
score     rate   location  value 
---------------------------------
 0-99     10-15    A         3
100-110   10-15    A         6
0-99      10-15    B         1

预期产出

代码语言:javascript
运行
复制
 score     rate   location  value 
------------------------------------
 0-99        5-9     A           0   
 0-99        10-15   A           3
100-110     10-15    A           6
100-110      5-9     B           0
0-99        10-15    B           1
100-110     5-9      A           0
100-110    10-15     B           0
0-99       10-15     B           0
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-27 18:48:35

您可以尝试使用CROSS JOINscoreratelocation列生成笛卡儿产品,生成完整的表。

然后在OUTER JOIN表上执行CROSS JOIN

代码语言:javascript
运行
复制
create table t(
  score varchar(50),
  rate varchar(50),
  location  varchar(50),
  value  int
);

insert into t values ('0-99','5-9','A',2);   
insert into t values ('0-99','10-15','A',3);
insert into t values ('100-110','10-15','A',6);
insert into t values ('100-110','5-9','B',7);
insert into t values ('0-99','10-15','B',1);

查询1

代码语言:javascript
运行
复制
SELECT  
  s.score,
  r.rate,
  l.location,
  coalesce(t1.value,0)
FROM 
(SELECT DISTINCT score FROM T) s
CROSS JOIN
(SELECT DISTINCT rate FROM T) r
CROSS JOIN
(SELECT DISTINCT location FROM T) l
LEFT JOIN t t1 on s.score = t1.score and t1.rate = r.rate and t1.location = l.location
ORDER BY  l.location  

结果

代码语言:javascript
运行
复制
|   score |  rate | location | coalesce |
|---------|-------|----------|----------|
|    0-99 | 10-15 |        A |        3 |
|    0-99 |   5-9 |        A |        2 |
| 100-110 | 10-15 |        A |        6 |
| 100-110 |   5-9 |        A |        0 |
|    0-99 | 10-15 |        B |        1 |
|    0-99 |   5-9 |        B |        0 |
| 100-110 | 10-15 |        B |        0 |
| 100-110 |   5-9 |        B |        7 |
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52044872

复制
相关文章

相似问题

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