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