gpt4 book ai didi

sql - 匹配两个数据库中的行组

转载 作者:行者123 更新时间:2023-12-04 14:45:47 24 4
gpt4 key购买 nike

我在两个数据库中有以下(简化的)情况:

    ID       Prog      T         Qt   
|---------|--------|---------|---------|
| a | 1 | N | 100 |
| b | 1 | Y | 10 |
| b | 2 | N | 90 |
| c | 1 | N | 25 |
| c | 2 | Y | 25 |
| c | 3 | Y | 25 |
| c | 4 | Y | 25 |
|---------|--------|---------|---------|

    ID       Prog      T         Qt   
|---------|--------|---------|---------|
| 1 | 1 | Y | 10 |
| 1 | 2 | N | 90 |
| 2 | 1 | Y | 100 |
| 3 | 1 | Y | 100 |
| 4 | 1 | Y | 50 |
| 4 | 2 | Y | 25 |
| 4 | 3 | Y | 25 |
|---------|--------|---------|---------|

我需要比较行组(主键是 ID 和 Prog),找出哪些行组代表相同的因素组合(不考虑 ID)。

在上面的示例中,第一个表中的 ID“b”和第二个表中的 ID“1”具有相同的 Prog、T 和 Qt 值组合,而其他任何一个都不能被认为在 2 dbs(虽然第二个表中的 ID“2”和“3”相等,但我对在同一个数据库中进行比较不感兴趣)。

我希望我解释了一切。

最佳答案

连接和聚合应该用于此目的:

select t1.id, t2.id
from (select t1.*, count(*) over (partition by id) as cnt
from t1
) t1 join
(select t2.*, count(*) over (partition by id) as cnt
from t2
) t2
on t1.prog = t2.prog and t1.T = t2.T and t1.Qt = t2.Qt and t1.cnt = t2.cnt
group by t1.id, t2.id, t1.cnt
having count(*) = t1.cnt;

这有点棘手。子查询计算每个表中每个 id 的行数。 on 子句在三列之间进行匹配——并检查 id 是否具有相同的计数。 group byhaving 然后获取匹配行数为总行数的行。

关于sql - 匹配两个数据库中的行组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42421802/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com