【问题标题】:Teradata SQL - Using 'OR' returning more records than expectingTeradata SQL - 使用“或”返回比预期更多的记录
【发布时间】:2019-03-20 23:08:41
【问题描述】:

以下两个查询分别返回大约十条记录。

SELECT ACC_NO
FROM TABLE1
WHERE ACC_NO IN (1, 2, 3, 4, 5)
AND DATE = 300618 

SELECT ACC_NO
FROM TABLE1
WHERE ACC_NO IN (1, 2, 3, 4, 5)
AND DATE = 310718

但是,当我将两个查询结合在一起运行时

SELECT ACC_NO
FROM TABLE1
WHERE ACC_NO IN (1, 2, 3, 4, 5)
AND DATE = 300618 
OR DATE = 310718

它返回数十万条记录。这怎么可能?

【问题讨论】:

  • 条件周围需要括号。
  • 假设常识优先规则,您的查询与(ACC_NO IN (1, 2, 3, 4, 5) AND DATE = 300618) OR (DATE = 310718)相同

标签: sql conditional teradata


【解决方案1】:

使用 IN

SELECT ACC_NO
FROM TABLE1
WHERE ACC_NO IN (1, 2, 3, 4, 5)
AND DATE in ( 300618, 310718)

【讨论】:

    【解决方案2】:

    如果您将ORAND 一起使用,则需要使用括号:

    SELECT ACC_NO
    FROM TABLE1
    WHERE ACC_NO IN (1, 2, 3, 4, 5) AND (DATE = 300618 OR DATE = 310718);
    

    但是,如果您有更多日期,这很奇怪,因此请使用 IN 子句而不是巨大的 ORs :

    SELECT ACC_NO
    FROM TABLE1
    WHERE ACC_NO IN (1, 2, 3, 4, 5) AND DATE IN (300618, 310718);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-22
      • 1970-01-01
      • 1970-01-01
      • 2020-01-12
      • 1970-01-01
      • 2014-01-19
      • 1970-01-01
      • 2019-03-20
      相关资源
      最近更新 更多