让我们说我有2个SQL查询.表A包含,
ID
--
1
1
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
这个查询,
Select distinct ID1 FROM A
Run Code Online (Sandbox Code Playgroud)
给我,
ID
--
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
第二个
Select ID2 FROM B
Run Code Online (Sandbox Code Playgroud)
这给了我,
ID2
--
8
21
33
43
Run Code Online (Sandbox Code Playgroud)
如何2获得此记录集?
ID1 ID2
--- ---
1 8
2 21
3 33
4 43
Run Code Online (Sandbox Code Playgroud)
您没有指定sql server的版本,但如果您使用的是sql server 2008+,则可以通过添加row_number()到每个表然后加入以下内容来实现row_number():
select a.id, b.id2
from
(
select id, row_number() over(order by id) rn
from a
) a
inner join
(
select id2, row_number() over(order by id2) rn
from b
) b
on a.rn = b.rn
Run Code Online (Sandbox Code Playgroud)
如果您只想使用DISTINCT值,那么您应该能够使用:
select a.id, b.id2
from
(
select id, row_number() over(order by id) rn
from
(
select distinct id
from a
) a
) a
inner join
(
select id2, row_number() over(order by id2) rn
from b
) b
on a.rn = b.rn;
Run Code Online (Sandbox Code Playgroud)
如果每个表中有不同的行数,那么您可能希望使用FULL OUTER JOIN:
select a.id, b.id2
from
(
select id, row_number() over(order by id) rn
from
(
select distinct id
from a
) a
) a
full outer join
(
select id2, row_number() over(order by id2) rn
from b
) b
on a.rn = b.rn;
Run Code Online (Sandbox Code Playgroud)