Sql 连接两个不相关的表

Sql 连接两个不相关的表,sql,tsql,Sql,Tsql,我有两个表,如A和B。每个表都有一列(ID),按升序排列。 我想连接像C表这样的表。数据不是静态的,但在A和B中,行数始终相等。我尝试了join语句,但找不到。谢谢你的帮助 A (ID) -- 2 3 4 6 8 B (ID) -- 11 12 13 14 15 C ( IDA , IDB ) -- 2 11 3 12 4 13 6 14 8 15 如果您使用的数据库支持行号(),如Oracle、postgresql、sql server: sel

我有两个表,如A和B。每个表都有一列(ID),按升序排列。 我想连接像C表这样的表。数据不是静态的,但在A和B中,行数始终相等。我尝试了join语句,但找不到。谢谢你的帮助

A (ID)
--
2
3
4
6
8

B (ID)
--
11
12
13
14
15

C ( IDA ,  IDB )
--
2     11
3     12
4     13
6     14
8     15

如果您使用的数据库支持行号(),如Oracle、postgresql、sql server:

select a_id, b_id
  from (select row_number() over(order by id) as a_rn, id as a_id from a) x
  join (select row_number() over(order by id) as b_rn, id as b_id from b) y
    on x.a_rn = y.b_rn
小提琴:

如果您使用的是mysql,则可以使用变量模拟行数:

select a_id, b_id
  from (select @rn := @rn + 1 as a_rn, id as a_id
          from a
         cross join (select @rn := 0) r) x
  join (select @rx := @rx + 1 as b_rn, id as b_id
          from b
         cross join (select @rx := 0) r) y
    on x.a_rn = y.b_rn

Fiddle:

如果您使用的数据库支持行号(),如Oracle、postgresql、sql server:

select a_id, b_id
  from (select row_number() over(order by id) as a_rn, id as a_id from a) x
  join (select row_number() over(order by id) as b_rn, id as b_id from b) y
    on x.a_rn = y.b_rn
小提琴:

如果您使用的是mysql,则可以使用变量模拟行数:

select a_id, b_id
  from (select @rn := @rn + 1 as a_rn, id as a_id
          from a
         cross join (select @rn := 0) r) x
  join (select @rx := @rx + 1 as b_rn, id as b_id
          from b
         cross join (select @rx := 0) r) y
    on x.a_rn = y.b_rn
提琴:

试试这个:

select a.id ida,b.id idb from 
( select a.*, row_number() over (order by id) rn from a) a
join (select b.*, row_number() over (order by id) rn from b) b on a.rn=b.rn
试试这个:

select a.id ida,b.id idb from 
( select a.*, row_number() over (order by id) rn from a) a
join (select b.*, row_number() over (order by id) rn from b) b on a.rn=b.rn

连接不相关的表

演示SQL脚本

SELECT T1.T1_Name,ISNULL(T2.T2_Class,'') AS T2_Class FROM
( SELECT T1_Name,ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS S_NO FROM #T1) T1
LEFT JOIN
( SELECT T2_Class,ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS S_NO FROM #T2) T2
ON t1.S_NO=T2.S_NO;
为了连接不相关的表,我们将介绍一个常见的序列号连接列,如下所示

SQL脚本

SELECT T1.T1_Name,ISNULL(T2.T2_Class,'') AS T2_Class FROM
( SELECT T1_Name,ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS S_NO FROM #T1) T1
LEFT JOIN
( SELECT T2_Class,ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS S_NO FROM #T2) T2
ON t1.S_NO=T2.S_NO;

连接不相关的表

演示SQL脚本

SELECT T1.T1_Name,ISNULL(T2.T2_Class,'') AS T2_Class FROM
( SELECT T1_Name,ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS S_NO FROM #T1) T1
LEFT JOIN
( SELECT T2_Class,ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS S_NO FROM #T2) T2
ON t1.S_NO=T2.S_NO;
为了连接不相关的表,我们将介绍一个常见的序列号连接列,如下所示

SQL脚本

SELECT T1.T1_Name,ISNULL(T2.T2_Class,'') AS T2_Class FROM
( SELECT T1_Name,ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS S_NO FROM #T1) T1
LEFT JOIN
( SELECT T2_Class,ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS S_NO FROM #T2) T2
ON t1.S_NO=T2.S_NO;

1.使用
ROW_NUMBER
为每行2提供一个唯一的id。使用
完全外部联接
(或
内部联接
,如果您可以保证它们始终具有相同的行数)通过该行数值联接它们您使用的是什么数据库?在我看来,如果表不相关,则不应在数据库中处理此问题。它应该在客户端代码中处理。1。使用
ROW_NUMBER
为每行2提供一个唯一的id。使用
完全外部联接
(或
内部联接
,如果您可以保证它们始终具有相同的行数)通过该行数值联接它们您使用的是什么数据库?在我看来,如果表不相关,则不应在数据库中处理此问题。它应该在客户端代码中处理。