我想在不使用笛卡尔连接或交叉连接的情况下在两个表中输出所有可能的组合。这可能吗?替代笛卡尔和交叉连接
0
A
回答
1
所有可能的组合是笛卡尔产品的定义。
以下是从两个表中获得笛卡尔产品的3个替代方案。 所有3个方案最终归结为一个交叉连接(和执行计划是所有3相同):
创建和填充示例表:
CREATE TABLE t1
(
int_col int
)
CREATE TABLE t2
(
char_col char(1)
)
INSERT INTO t1 VALUES
(1), (2), (3), (4), (5), (6), (7), (8), (9), (10)
INSERT INTO t2 VALUES
('a'), ('b'), ('c'), ('d'), ('e'), ('f'), ('h'), ('i'), ('j'), ('k')
的查询:
隐式交叉加盟:
SELECT *
FROM t1, t2
一个明确的交叉连接:
SELECT *
FROM t1
CROSS JOIN t2
跨应用:
SELECT *
FROM t1
CROSS APPLY t2
所有的结果都是一样的:
int_col char_col
1 a
2 a
3 a
4 a
5 a
6 a
7 a
8 a
9 a
10 a
1 b
2 b
3 b
4 b
5 b
6 b
7 b
8 b
9 b
10 b
1 c
2 c
3 c
4 c
5 c
6 c
7 c
8 c
9 c
10 c
1 d
2 d
3 d
4 d
5 d
6 d
7 d
8 d
9 d
10 d
1 e
2 e
3 e
4 e
5 e
6 e
7 e
8 e
9 e
10 e
1 f
2 f
3 f
4 f
5 f
6 f
7 f
8 f
9 f
10 f
1 h
2 h
3 h
4 h
5 h
6 h
7 h
8 h
9 h
10 h
1 i
2 i
3 i
4 i
5 i
6 i
7 i
8 i
9 i
10 i
1 j
2 j
3 j
4 j
5 j
6 j
7 j
8 j
9 j
10 j
1 k
2 k
3 k
4 k
5 k
6 k
7 k
8 k
9 k
10 k
1
我想输出无需使用笛卡尔两个表的所有可能的组合,连接或交叉连接。这可能吗?
由严格的定义级别,这是不可能的。为什么?因为笛卡尔积的定义正如你所描述的(术语“笛卡尔连接”不是经常使用,而是“笛卡尔积”的同义词)。因此,您使用的任何方法都是实现此功能。通常这个功能是使用CROSS JOIN
(我不情愿地承认,有时使用,
)来实现。
你可能会说“不加012地加1”而不做+ 1
。其他人来了,并说“使用+ 2 - 1
”。那么,这是增加一个,但只使用两个操作,而不是一个。
如果你想有一个笛卡尔乘积,但你不希望使用CROSS JOIN
运营商,最典型的方法是使用ON 1=1
:
select t1.*, t2.*
from t1 join
t2
on 1 = 1;
相关问题
- 1. 如何在RavenDB中做交叉连接/笛卡尔产品?
- 2. 两个数组的笛卡尔连接
- 3. SQL可能的笛卡尔连接
- 4. 笛卡尔积
- 5. 如何使用外连接和笛卡尔积连接三个表
- 6. DStream的笛卡尔
- 7. 笛卡尔积SQL
- 8. RxJs笛卡尔积
- 9. 笛卡尔积 - PHP
- 10. 笛卡尔积VBA
- 11. AWK笛卡尔积
- 12. 笛卡尔积Ruby
- 13. 在Python中快速笛卡尔到极坐标到笛卡尔
- 14. Java中的迭代笛卡尔积
- 15. 如何在Spark 2.0中启用笛卡尔连接?
- 16. SQL连接获得2列的笛卡尔积了3列
- 17. 平面图内的星图复制笛卡尔连接
- 18. 简单的SELECT查询导致笛卡尔连接?
- 19. 什么可能导致合并笛卡尔连接
- 20. MS Access的SQL - 多个连接与AND给笛卡尔产品?
- 21. 将笛卡尔5D和角2D转换为纬长替换
- 22. 合并连接笛卡尔:我可以找到缺少的WHERE连接条件?
- 23. PHP笛卡尔产品和标签
- 24. 按钮和笛卡尔坐标
- 25. 分数和笛卡尔坐标
- 26. Java重复笛卡尔积和
- 27. SQL笛卡尔加入
- 28. Python的笛卡尔乘积
- 29. 获得笛卡尔产品
- 30. 笛卡尔产品列表
所有可能的组合** **是一个笛卡尔积的定义。您可以使用显式交叉连接或隐式交叉连接,但结果将是相同的。 –
----------为什么? ---------- –
我可以在不使用交叉连接的情况下获得所有可能的组合吗?根据某人太昂贵。 – user7414008