使用左联接的SQL查询中的问题

时间:2018-11-10 16:40:21

标签: sql left-join hana

我正在尝试从集成的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查询出了点问题,因为当我删除所有联接并以与MARK_AS_DELETED!='1'相同的条件进行简单的Select查询时,我得到了正确的输出,但没有使用Left Join。 我尝试使用所有可能的方式(例如,向上和向下移动条件等)重写我的Left Join查询,但没有任何效果。

如果您能在这里帮助我,我将不胜感激

1 个答案:

答案 0 :(得分:4)

使用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的定义。 LEFT JOIN将所有行保留在第一个表中,而不管ON子句的计算结果为true,false还是NULL

因此,将忽略 first 表上的条件。规则是第一个表在WHERE中的条件,第二个表在ON中的条件。