如何编写SQL查询来处理两个表之间的数据?

如何编写SQL查询来处理两个表之间的数据?,sql,sql-server,database,Sql,Sql Server,Database,我有一个以特定方式查询两个表的用例 两个表都有一列 表1第1栏: A B C 1 2 3 表2第1栏: A B C 1 2 3 我需要构造一个查询,使其如下所示: A 1 A 2 A 3 B 1 B 2 B 3 ... 这在MS SQL Server中是否可能 谢谢 特伦特它被称为交叉连接 Select t1.column1,t2.column1 from Table1 t1 CROSS JOIN Table2 t2 它将在两个表之间生成笛卡尔积 它被称为交叉连接 Select t1

我有一个以特定方式查询两个表的用例

两个表都有一列

表1第1栏:

A
B
C
1
2
3
表2第1栏:

A
B
C
1
2
3
我需要构造一个查询,使其如下所示:

A 1
A 2
A 3
B 1
B 2
B 3
...
这在MS SQL Server中是否可能

谢谢


特伦特

它被称为交叉连接

Select t1.column1,t2.column1 from Table1 t1
CROSS JOIN Table2 t2

它将在两个表之间生成笛卡尔积

它被称为
交叉连接

Select t1.column1,t2.column1 from Table1 t1
CROSS JOIN Table2 t2
它将在两个表之间生成笛卡尔积

解决方案1(标准化样式):

解决方案2(旧式):

解决方案3(疯狂风格):

我最喜欢的当然是交叉连接解决方案1(规范化样式):

SELECT Tbl1.column1,Tbl1.column1 FROM Table1 Tbl1
CROSS JOIN Table2 Tbl2
ORDER BY Tbl1.column1
解决方案2(旧式):

解决方案3(疯狂风格):


我最喜欢的当然是交叉连接

look up
cross-join
。使用OUTER-APPLY将提供您所需的信息。look up
cross-join
。使用OUTER-APPLY将提供您所需的信息。(我的意见)。提到过时的连接语法(解决方案2)并不是一个好主意,更不用说它已经过时了。给新手留下的印象是,语法同样可以接受。不是过时的语法,只是不同的语法,你读过哪本书是过时的?我已经修改了我的主张;)语义!永远是一个傻瓜!过时的、过时的、老式的等等。我不喜欢不澄清。。这种连接语法不被认为是最佳实践,在某些(主要是外部连接)场景中可能会产生错误的结果。应该鼓励新手使用更新的SQL-92连接语法。它不是外部连接,而是交叉连接。但和所有语法一样,如果您的查询不好,那么您的结果是错误的。应该鼓励新手使用较新的SQL-92联接语法,当然,还要知道旧语法(有些DBM违反SQL标准,有时您处理旧查询)。旧的和过时的是不同的。例如:从t1,t2中选择*,其中t1.cle*=t2.cle是左外连接的obsolte语法。(我的观点)。提到过时的连接语法(解决方案2)并不是一个好主意,更不用说它已经过时了。给新手留下的印象是,语法同样可以接受。不是过时的语法,只是不同的语法,你读过哪本书是过时的?我已经修改了我的主张;)语义!永远是一个傻瓜!过时的、过时的、老式的等等。我不喜欢不澄清。。这种连接语法不被认为是最佳实践,在某些(主要是外部连接)场景中可能会产生错误的结果。应该鼓励新手使用更新的SQL-92连接语法。它不是外部连接,而是交叉连接。但和所有语法一样,如果您的查询不好,那么您的结果是错误的。应该鼓励新手使用较新的SQL-92联接语法,当然,还要知道旧语法(有些DBM违反SQL标准,有时您处理旧查询)。旧的和过时的是不同的。例如:从t1,t2中选择*,其中t1.cle*=t2.cle是左外连接的obsolte语法。不会生成笛卡尔乘积,因为这是一组有序对。向新手介绍一个不合适的数学术语有用吗?关系术语是
产品
(由发明关系模型的Codd发明),SQL术语是
交叉连接
(由ISO SQL标准委员会发明)。不会产生笛卡尔乘积,因为这是一组有序对。向新手介绍一个不合适的数学术语有用吗?关系术语是
产品
(由发明关系模型的Codd发明),SQL术语是
交叉连接
(由ISO SQL标准委员会发明)。
SELECT Tbl1.column1,Tbl1.column1 FROM Table1 Tbl1
CROSS JOIN Table2 Tbl2
ORDER BY Tbl1.column1