交叉联接返回的行太少
Cross join returning too few rows
下面有两个表格:
Table一个
+--------+--------+--------+
| color | shape | size |
+--------+--------+--------+
| Red | Square | Small |
| Blue | Square | Small |
| Yellow | Square | Small |
| Red | Circle | Small |
| Blue | Circle | Small |
| Yellow | Circle | Small |
| Yellow | Square | Medium |
| Red | Circle | Medium |
| Blue | Circle | Medium |
| Yellow | Circle | Medium |
| Red | Square | Large |
| Red | Circle | Large |
| Blue | Circle | Large |
| Yellow | Circle | Large |
+--------+--------+--------+
Table B
+---------------+
| edge |
+---------------+
| Straight Line |
| Dotted Line |
| Squiggly Line |
+---------------+
我是运行以下查询:
WITH TableA (color, shape, size)
AS (SELECT DISTINCT color, shape, size
FROM TableA),
TableB (edge)
AS (SELECT DISTINCT edge
FROM TableB)
SELECT COUNT(*) FROM
(SELECT a.*,
b.*
FROM TableA AS a
CROSS JOIN TableB AS b) as x;
我期望发生的事情:它将 select 来自 Table A(颜色、形状、大小)中每一列的所有不同值,然后 select 每个唯一值来自Table B(边)中的每一列,然后进行交叉连接,生成颜色、形状、大小和边的每种组合。
我已经检查了查询 select 的唯一值所在的部分是独立工作的,但是 运行 它一起产生的行数比我预期的要少。
有 3 种颜色、2 种形状、3 种尺寸和 3 条边,我应该得到 54 种可能 combinations/rows,但我只得到 42 种。
您需要独立 select 列:
select c.olor, s.shape, sz.size, e.edge
from (select distinct color from a) c cross join
(select distinct shape from a) s cross join
(select distinct size from a) sz cross join
(select distinct edge from b) e
下面有两个表格:
Table一个
+--------+--------+--------+
| color | shape | size |
+--------+--------+--------+
| Red | Square | Small |
| Blue | Square | Small |
| Yellow | Square | Small |
| Red | Circle | Small |
| Blue | Circle | Small |
| Yellow | Circle | Small |
| Yellow | Square | Medium |
| Red | Circle | Medium |
| Blue | Circle | Medium |
| Yellow | Circle | Medium |
| Red | Square | Large |
| Red | Circle | Large |
| Blue | Circle | Large |
| Yellow | Circle | Large |
+--------+--------+--------+
Table B
+---------------+
| edge |
+---------------+
| Straight Line |
| Dotted Line |
| Squiggly Line |
+---------------+
我是运行以下查询:
WITH TableA (color, shape, size)
AS (SELECT DISTINCT color, shape, size
FROM TableA),
TableB (edge)
AS (SELECT DISTINCT edge
FROM TableB)
SELECT COUNT(*) FROM
(SELECT a.*,
b.*
FROM TableA AS a
CROSS JOIN TableB AS b) as x;
我期望发生的事情:它将 select 来自 Table A(颜色、形状、大小)中每一列的所有不同值,然后 select 每个唯一值来自Table B(边)中的每一列,然后进行交叉连接,生成颜色、形状、大小和边的每种组合。
我已经检查了查询 select 的唯一值所在的部分是独立工作的,但是 运行 它一起产生的行数比我预期的要少。
有 3 种颜色、2 种形状、3 种尺寸和 3 条边,我应该得到 54 种可能 combinations/rows,但我只得到 42 种。
您需要独立 select 列:
select c.olor, s.shape, sz.size, e.edge
from (select distinct color from a) c cross join
(select distinct shape from a) s cross join
(select distinct size from a) sz cross join
(select distinct edge from b) e