为列数较少的不同行选择更多行

时间:2015-10-21 02:18:37

标签: sql oracle11g oracle-sqldeveloper

我遇到了两个相互矛盾的查询,这些查询表明,不同的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.

关于为什么第一个查询会产生如此奇怪的结果的任何想法?

0 个答案:

没有答案