我在从 SQL 查询返回任何结果时遇到一些问题。我很确定这与 WHERE 条件有关。
我只想返回某些 RULE_ID。我通过 TABLE1 中的 RULE_NAME 来识别 RULE_ID。然后,我连接 TABLE1 和 TABLE2,并判断如果 RULE_ID 的 DATE 列等于 20 年 3 月 5 日,并且 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
关于java - 具有多个 where 条件的右外连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60549036/