我遇到了两个相互矛盾的查询,这些查询表明,不同的2列可以返回比4列不同的行(包括那些2列)。
alpha_id和beta_id是NUMBER; delta和gamma是VARCHAR2。
我运行的第一个查询返回以下计数:
29'252'799
时的THE_LINE = alpha_id, beta_id, delta, gamma
111'163'500
时的THE_LINE = alpha_id, beta_id
SELECT COUNT(*)
FROM (
SELECT DISTINCT ____________ -- (THE_LINE)
FROM (
SELECT DISTINCT alpha_id,
beta_id,
delta,
gamma
FROM table_in_question
WHERE alpha_id IN (1, 2, 3, 4)
AND (delta, gamma) IN (('FIRST', 'SECOND'), ('FIRST', 'THIRD'))
)
);
第二个查询应该在逻辑上相同,包括创建一个表,然后从中进行选择。这些是计数:
29'252'799
时的THE_SAME_LINE = alpha_id, beta_id, delta, gamma
27'976'202
时的THE_SAME_LINE = alpha_id, beta_id
CREATE TABLE tmp_table TABLESPACE flash AS
SELECT DISTINCT alpha_id,
beta_id,
delta,
gamma
FROM table_in_question
WHERE alpha_id IN (1, 2, 3, 4)
AND (delta, gamma) IN (('FIRST', 'SECOND'), ('FIRST', 'THIRD'));
SELECT COUNT(*)
FROM (
SELECT DISTINCT ____________ -- (THE_SAME_LINE)
FROM tmp_table
);
第二个查询有意义 - 如果选择了更多列,则返回更多行。但是,第一个查询会返回更多行,并选择更少列。
这可能与我alpha_id
上的分区有关吗?
请注意,此时alpha_id列中的唯一值是1,2,3和4.
关于为什么第一个查询会产生如此奇怪的结果的任何想法?