-1

假设我有 2 个 sql 查询。表 A 包含,

ID
--
1
1
1
2
3
4

这个查询,

Select distinct ID1 FROM A

给我,

ID
--
1
2
3
4

第二个

Select ID2 FROM B

这给了我,

ID2
--
8
21
33
43

2 如何获得这个记录集?

ID1  ID2
---  ---
 1    8
 2    21
 3    33
 4    43
4

1 回答 1

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

请参阅带有演示的 SQL Fiddle

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

请参阅带有演示的 SQL Fiddle

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

请参阅带有演示的 SQL Fiddle

于 2013-01-08T13:52:59.007 回答