首页 > 解决方案 > SQL WHERE 子句使用 AND 但不使用 OR

问题描述

我有下面的 SQL 查询,它根据 WHERE 子句中的日期字段过滤掉记录。我有两个不同的日期属性。

SELECT * FROM MY_TABLE WHERE DATE1 >= '2002-01-01' OR DATE2 >= '2002-01-01';

此 SQL 给出数据读取错误。但是当我用它替换OR它时,AND它工作正常。

如何过滤记录以选择任何一个日期大于某个任意日期的记录?

编辑1

我觉得我的问题很不完整。我正在使用 apache 钻查询引擎。另外,实际查询是两个表的连接,其中 2 个日期列位于两个不同的连接表中,如下所示

   SELECT
        A.id AS my_id,
        B.is_active is_active,
        C.other_id AS id2
    FROM
        A
        INNER JOIN B ON A.id = B.id
        INNER JOIN C ON C.id = A.id
    WHERE
        A.date >= '2002-01-01' OR
        B.date >= '2002-01-01';

编辑2

以下是我的错误信息

SQL Error: DATA_READ ERROR: The JDBC storage plugin failed while trying setup the SQL query. 

标签: sqlapache-drill

解决方案


好吧,我尝试了一些建议,例如转换数据类型和使用正确的日期文字,但这些都不起作用。但是,如果我从查询中完全删除第三个表,它就可以工作。不知道为什么会这样,但我总是可以在创建临时表后加入第三张表,所以我认为这解决了我的问题。基本上有效的查询如下:

    SELECT
        A.id AS my_id,
        B.is_active is_active
    FROM
        A
        INNER JOIN B ON A.id = B.id
    WHERE
        A.date >= '2002-01-01' OR
        B.date >= '2002-01-01';

推荐阅读