具有左联接的SQL查询中的问题
我正在尝试从Hana数据库中获取数据 以下是SQL语句:-具有左联接的SQL查询中的问题,sql,left-join,hana,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
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。那个!=它不能正常工作。我试过了,但问题仍然存在。我猜我的左连接查询有问题,因为当我删除所有连接并使用与MARK_as_DELETED相同的条件进行简单的Select查询时!='1',我得到了正确的输出,但没有左连接。
我试着用所有可能的方法重新编写我的左连接查询,比如上移和下移条件等,但没有任何效果
如果您能在这里帮助我,我将不胜感激。当使用left join时,第一个表上的条件通常应该包含在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
这源于左连接的定义。左联接保留第一个表中的所有行,而不管ON子句的计算结果是true、false还是NULL
因此,忽略第一个表上的条件。规则是第一个表上的条件进入何处,第二个表上的条件进入on。@vinod827:换句话说:您已发出警报。标记为已删除!='1'通过将其置于ON子句中,仅表示连接条件。因此,从警报中选择所有行,只考虑加入未标记警报行的数据记录。这是一个常见问题。请总是用谷歌搜索你的问题/问题/目标的许多清晰、简洁和具体的版本/措辞,有或没有你的特定字符串/名称,并阅读许多答案。将发现的相关关键字添加到搜索中。如果你找不到答案,就发布,使用1个变体搜索作为标签的标题和关键字。请参见文本上方的向下投票箭头鼠标。当您确实有非重复代码问题要发布时,请阅读并执行操作。了解左联接返回的内容:内部联接行加上由null扩展的不匹配左表行。始终知道作为左连接的一部分,您需要什么样的内部连接。一个WHERE或ON,它要求在上的左联接删除任何由NULL扩展的行后右表列不为NULL,即只保留内部联接行,即将左联接转换为内部联接。你有。