SQL - 什么时候SELECT DISTINCT会在更多列上产生更少的结果?

问题描述 投票:1回答:1

从逻辑上讲,SELECT DISTINCT <multiple columns>应该产生与SELECT DISTINCT <less columns>相同或更大的输出量。

我无法使用我实际使用的数据,但如果示例数据集是:

MAKE    |  MODEL  |  YEAR
Toyota  | Camry   | 2017
Toyota  | Camry   | 2015
Toyota  | Corolla | 2016
Toyota  | Corolla | 2016
Honda   | Civic   | 2012
Honda   | Accord  | 2012

然后SELECT DISTINCT MAKE应该产生2行:

MAKE
Toyota
Honda

SELECT DISTINCT MAKE,MODEL应该产生4行:

MAKE    |  MODEL
Toyota  | Camry
Toyota  | Corolla
Honda   | Civic
Honda   | Accord

而SELECT DISTINCT MAKE,MODEL,YEAR应该会产生5行:

MAKE    |  MODEL  |  YEAR
Toyota  | Camry   | 2017
Toyota  | Camry   | 2015
Toyota  | Corolla | 2016
Honda   | Civic   | 2012
Honda   | Accord  | 2012

您选择的DISTINCT列越多,似乎额外列具有不同值的机会越多,因此可能会增加(但至少保持相同)结果中的行数。

是否有一种情况,SELECT DISTINCT在更多列上导致更少的结果?这就是我的情况,但我不确定是否有正当理由可能。

编辑:

这是我的SQL的“副本”,除了我已经将表/列名称更改为泛型并为了简单而删除了一些额外的where子句。

WITH view1
AS
(SELECT DISTINCT t1.column1, t1.column2, t1.column3, t2.column4, t2.column5
FROM TABLE_ONE t1
INNER JOIN TABLE_TWO t2
ON t1.column1 = t2.column1
WHERE t1.column2 = "Name"
AND t2.column3 = 2000
),

view2
AS
(SELECT DISTINCT v1.column1, v1.column2, v1.column3, v1.column4, v1.column5, t3.column6
FROM view1 v1
INNER JOIN TABLE_THREE t3
ON v1.column2 = t3.column2
WHERE t3.column6 = "something"
),

SELECT DISTINCT v2.column1, v2.column2, v2.column3, v2.column4, v2.column5, v2.column6, t4.column7
FROM view2 v2
INNER JOIN TABLE_FOUR t4
ON v2.column4 = t4.column4;

当我从上面的所有内容中删除诸如“column5”之类的内容时,它实际上会返回更多结果。

sql select distinct
1个回答
3
投票

永远不会。数据集中不同列的不同组合永远不会小于SAME数据集中单个字段的唯一值。它既不可能在数学上也不在SQL中。无论您加入什么和其他因素,这都应该成立。

© www.soinside.com 2019 - 2024. All rights reserved.