Проблема в запросе SQL с левым соединением - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь получить данные из интегрированной базы данных Hana.

Ниже приведен SQL: -

 SELECT alert.UNIQUE_ALERT_ID, 
        alert.MARK_AS_DELETED, 
        data.VALUE
 FROM "ab"."t-systems.testDB::tables.Alerting" alert
      LEFT JOIN 
      "ab"."t-systems.testDB::tables.AdditionalData" data
      ON alert.UNIQUE_ALERT_ID = data.UNIQUE_ALERT_ID
      AND data.KEY='batchId'
      AND alert.MARK_AS_DELETED != '1';

Проблема в том, что я получаю все данные, где Mark_As_Deleted также равен 1. Символ! = Не работает должным образом. Я пытался с <>, но проблема все еще сохраняется. Я предполагаю, что что-то не так с моим запросом Left Join, потому что когда я удаляю все соединения и выполняю простой запрос Select с тем же условием, что и MARK_AS_DELETED! = '1', я получаю правильный вывод, но не с Left Join. Я попытался переписать свой запрос на левое соединение всеми возможными способами (например, переместить условие вверх и вниз и т. Д.), Но ничего не получилось.

Я был бы очень признателен, если бы вы мне помогли здесь

1 Ответ

0 голосов
/ 10 ноября 2018

При использовании left join условия в таблице first обычно должны входить в предложение where.

Так что я думаю, что вы хотите:

SELECT alert.UNIQUE_ALERT_ID, alert.MARK_AS_DELETED, data.VALUE
FROM "ab"."t-systems.testDB::tables.Alerting" alert LEFT JOIN
     "ab"."t-systems.testDB::tables.AdditionalData" data
      ON alert.UNIQUE_ALERT_ID = data.UNIQUE_ALERT_ID AND
         data.KEY = 'batchId'
WHERE alert.MARK_AS_DELETED <> '1';  -- remove the quotes if this is a number

Это следует из определения LEFT JOIN. A LEFT JOIN сохраняет все строки в первой таблице независимо от того, имеет ли предложение ON значение true, false или NULL.

Итак, условие в таблице first игнорируется. Правило состоит в том, что условия в первой таблице указываются в WHERE, а во второй таблице - в ON.

.
...