我正在尝试从集成的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查询,但没有任何效果。
如果您能在这里帮助我,我将不胜感激
答案 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
中的条件。