具有多个条件的右外部连接

问题描述 投票:0回答:2

我在从SQL查询返回任何结果时遇到了一些问题。我很确定这与WHERE条件有关。

我只希望返回某些RULE_ID。我在TABLE1中通过RULE_NAME标识RULE_ID。然后,我加入TABLE1和TABLE2,并说如果RULE_ID的列DATE等于05-MAR-20,而COLUMN3列不为空,则返回RULE_ID。

目前,此查询没有任何结果,我也不完全清楚为什么。任何帮助将不胜感激!

编辑:COLUMN3在TABLE2中,但不在TABLE1中。我没有收到任何错误,只是在我认为应该得到一些结果时才显示任何结果。如果删除AND (TABLE2.DATE = '05-MAR-20'),则会得到几个结果。不知道为什么会这样...

sql_query = """
            SELECT TABLE1.RULE_ID, TABLE2.RULE_ID
            FROM TABLE1
            RIGHT OUTER JOIN TABLE2
            ON (TABLE1.RULE_ID = TABLE2.RULE_ID)
            WHERE (TABLE1.RULE_NAME = 'TEST1' OR TABLE1.RULE_NAME = 'TEST2')  
            AND (TABLE2.DATE = '05-MAR-20')
            AND COLUMN3 IS NOT NULL
            """
java python sql jython
2个回答
0
投票

使用LEFT JOIN。遵循逻辑要容易得多(“保留第一张表中的所有行。然后将适当的过滤移到ON子句):

SELECT TABLE1.RULE_ID, TABLE2.RULE_ID
FROM TABLE2 LEFT JOIN
     TABLE1
      ON TABLE1.RULE_ID = TABLE2.RULE_ID AND
         TABLE1.RULE_NAME IN ('TEST1', 'TEST2')   
WHERE TABLE2.DATE = DATE '2020-03-05' AND TABLE2.COLUMN3 IS NOT NULL

0
投票

我发现了问题-日期带有时间戳。以dB为单位,日期仅表示DD-MON-YY,但是当我返回日期时,我也有DD-MON-YY,HH:MM:SS.0。现在只需要找到一种方法来摆脱时间戳,而只保留日期即可。

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