Tsql 如何使用t-sql获得两个完全不相关的表中的每个排列

Tsql 如何使用t-sql获得两个完全不相关的表中的每个排列,tsql,join,Tsql,Join,我有两个由另一个表间接关联的表 表A-ID,SomeFieldA 表B-ID,SomeFieldB 表AB-IDA、IDB、SomeFieldAB 我必须从头开始生成数据。所以我在表A中放了一些数据,在表B中也放了一些数据。问题是,我现在需要将数据插入TableAB,但我不知道如何生成一个脚本来同时执行TableA和TableB的所有排列 例如: 表A有两项记录: 1、‘A’ 2,‘AA’ 表B有两项记录: 3,“B” 4,“B” 我想在TableAB中插入以下数据: 1、3、“第一次烫发” 1

我有两个由另一个表间接关联的表

表A-ID,SomeFieldA

表B-ID,SomeFieldB

表AB-IDA、IDB、SomeFieldAB

我必须从头开始生成数据。所以我在表A中放了一些数据,在表B中也放了一些数据。问题是,我现在需要将数据插入TableAB,但我不知道如何生成一个脚本来同时执行TableA和TableB的所有排列

例如:

表A有两项记录:

1、‘A’

2,‘AA’

表B有两项记录:

3,“B”

4,“B”

我想在TableAB中插入以下数据:

1、3、“第一次烫发”

1、4、“第二次烫发”

2、3、“第三次烫发”

2、4、“第四次烫发”

最简单的方法是什么

 INSERT TableAB
 SELECT A.ID 'IDA', B.ID 'IDB'
      , A.SomeFieldA+" "+B.SomeFieldB  'SomeFieldAB' 
 FROM A, B
不带任何条件的联接将执行所有排列

您可以执行以下操作:

select
    a.*, b.*
from
    a, b
这将为您提供所有可能的组合


从这里开始,在INSERT语句的上下文中使用它来填充AB表就很简单了。

不要使用古老的连接语法:
来自A,B
,使用正确的连接:

DECLARE @TableA table (Col1 varchar(5), Col2 varchar(5))
DECLARE @Tableb table (Col1 varchar(5), Col2 varchar(5))

INSERT INTO @TableA VALUES ('a','a')
INSERT INTO @TableA VALUES ('aa','aa')

INSERT INTO @TableB VALUES ('b','b')
INSERT INTO @TableB VALUES ('BB','BB')

SELECT
    *
    FROM @TableA
        CROSS JOIN @TableB
    ORDER BY 1
输出

Col1  Col2  Col1  Col2
----- ----- ----- -----
a     a     b     b
a     a     BB    BB
aa    aa    b     b
aa    aa    BB    BB

(4 row(s) affected)
这也将产生相同的结果集:

SELECT
    *
    FROM @TableA
        JOIN @TableB ON 1=1
    ORDER BY 1

谢谢,我知道这很简单,我只是想加入,我只是把它弄得太复杂了。千万不要用那种语法!维护人员不会知道您是否引入了交叉连接。您应该始终使用显式连接,尤其是在进行交叉连接时。使用隐式连接的做法非常糟糕。我习惯于TSQL方式,而不是ANSI语法。。。但我同意这是一个合理的担忧。@Joseph说
谢谢,我知道这很简单,我只是想加入,我只是把事情弄得太复杂了。
你需要加入才能让这一切顺利进行!您在中注释的答案使用了一个连接,它是来自a、B的旧sytle
,请参阅使用当前SQL连接语法的同一连接的我的答案。隐式连接,错误-选择*错误。一段代码中有两个糟糕的实践,非常糟糕。