我有两个包含此值的表:
**table 1**
id name value
1 A 1
2 B 1
3 F 2
4 G 3
**table 2**
id name value
1 C 1
2 D 1
3 E 2
如果我通过值得到这两个表的内连接:
A C
A D
B C
B D
F E
但是,问题是我只希望来自两列的不同值:
A C
B D
F E
另一组可能的结果将是:
A D
B C
F E
表2的名称不会出现在表2中。
如果已经选择了列中的一个值,则无法再次选择它。此示例将是一个错误,因为已经选择了C:
A C
B C
F E
有什么想法吗?
答案 0 :(得分:2)
为了配对记录,您需要每个值的运行数来链接。为此使用row_number()。
select t1.name as t1_name, t2.name as t2_name
from
(
select name, value, row_number() over (partition by value order by name) as rn
from table1
) t1
join
(
select name, value, row_number() over (partition by value order by name) as rn
from table2
) t2
on t1.value = t2.value and t1.rn = t2.rn;
答案 1 :(得分:1)
根据您提供的数据以及您用来加入的列,您将获得应该获得的结果。
要获得所需的结果,您需要加入id
,而不是value
因此:
select a.id, a.name, b.name
from tableA a
inner join tableB b on a.id = b.id