簡體   English   中英

交叉連接返回的行太少

[英]Cross join returning too few rows

我有以下兩個表:

表A

+--------+--------+--------+
| 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  |
+--------+--------+--------+

表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;

我期望發生的事情:它將從表A中的每個列中選擇所有不同的值(顏色,形狀,大小),然后從表B中的每個列中選擇每個唯一值(邊),然后進行交叉連接以生成每種組合顏色,形狀,大小和邊緣。

我檢查了查詢選擇唯一值的部分是否獨立工作,但是一起運行將產生比我預期更少的行。

使用3種顏色,2種形狀,3種尺寸和3個邊緣,我應該得到54種可能的組合/行,但我只有42種。

您需要獨立選擇列:

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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM