SQL 查询中的左连接问题
Issue in SQL query with Left Join
我正在尝试从集成的 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 查询,但没有任何效果。
如果有人能帮助我,我将不胜感激
当使用 left join
时,first table 的条件通常应该进入 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
这是根据 a LEFT JOIN
的定义得出的。 LEFT JOIN
保留第一个 table 中的所有行,而不管 ON
子句的计算结果是真、假还是 NULL
。
因此,第一个 table 的条件将被忽略。规则是第一个 table 进入 WHERE
和第二个 table 进入 ON
.
我正在尝试从集成的 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 查询,但没有任何效果。
如果有人能帮助我,我将不胜感激
当使用 left join
时,first table 的条件通常应该进入 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
这是根据 a LEFT JOIN
的定义得出的。 LEFT JOIN
保留第一个 table 中的所有行,而不管 ON
子句的计算结果是真、假还是 NULL
。
因此,第一个 table 的条件将被忽略。规则是第一个 table 进入 WHERE
和第二个 table 进入 ON
.