Правое внешнее соединение с несколькими условиями - PullRequest
0 голосов
/ 05 марта 2020

У меня проблемы с возвратом результатов из моего запроса SQL. Я почти уверен, что это как-то связано с условием WHERE.

Я хочу, чтобы возвращались только определенные RULE_ID. Я идентифицирую RULE_ID по его RULE_NAME в TABLE1. Затем я присоединяюсь к TABLE1 и TABLE2 и говорю, что если столбец DATE для RULE_ID равен 05-MAR-20, а столбец COLUMN3 не равен NULL, возвращаю 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
            """

Ответы [ 2 ]

1 голос
/ 05 марта 2020

Используйте LEFT JOIN. Намного проще следовать логике c («сохранить все строки в первой таблице». Затем перенести соответствующую фильтрацию в предложение 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 голосов
/ 05 марта 2020

Я нашел проблему - даты помечены. В дБ дата просто говорит: DD-MON-YY, но когда я возвращаю даты, у меня также есть DD-MON-YY, HH: MM: SS.0. Просто нужно найти способ избавиться от метки времени и просто получить дату.

...