如何逐个映射2个不同的记录集?

use*_*567 -1 sql sql-server

让我们说我有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)

Tar*_*ryn 5

您没有指定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)

请参阅SQL Fiddle with Demo

如果您只想使用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)

请参阅SQL Fiddle with Demo

如果每个表中有不同的行数,那么您可能希望使用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)

请参阅SQL Fiddle with Demo