gpt4 book ai didi

SQL查询从一个表中返回另一个表中不存在的行

转载 作者:行者123 更新时间:2023-12-02 08:37:40 28 4
gpt4 key购买 nike

我最近犯了一个代价高昂且令人尴尬的错误,如果它再次发生,我感到非常难过。我希望你能帮助我……这就是发生的事情。

在部署到 PROD 时,其中一个步骤是确保所有 DEV.code_mapping 表行都存在于 PROD.code_mapping 表中。

为此,我运行了以下查询 (Oracle 11g)。我希望它显示 DEV.code_mapping存在于 PROD.code_mapping 中的每一行。

select * FROM code_mapping D 
where D.source_system_id = '&LHDNUMBER'
and not exists
(select 1 from
dm.code_mapping@PROD_CHECK P where
D.mapping_definition_id = P.mapping_definition_id and
D.cdm_code = P.cdm_code and
D.source_system_code = P.source_system_code);

查询返回零结果。

我错误地断定 DEV.code_mapping 中的每一行都存在于 PROD.code_mapping 中。

事实证明,PROD.code_mapping 表中实际上不存在任何行。查询不知何故没有接受。我认为这可能是因为此查询无法针对 PROD 中的空值进行评估,但没有多少 NVL([column],'null') 语句似乎可以实现此目的。

我怎样才能让它工作???

另外:

除了查询更正本身之外,我还欢迎您为此类工作提供任何最佳实践指导。我真的不想再像那样上线。

最佳答案

就个人而言,我会使用 MINUS

SELECT *
FROM code_mapping
WHERE soure_system_id = '&LHDNUMBER'
MINUS
SELECT *
FROM dm.code_mapping@prod_check

MINUS 自动处理 NULL 比较(源上的 NULL 自动匹配目标上的 NULL) .

如果你想list all differences between the two tables (即列出存在于 dev 而不是 prod 和 prod 但不是 dev 的所有行),您可以添加一个 UNION ALL

(SELECT a.*, 'In dev but not prod' descriptio
FROM dev_table a
MINUS
SELECT a.*, 'In dev but not prod' description
FROM prod_table a)
UNION ALL
(SELECT a.*, 'In prod but not dev' descriptio
FROM prod_table a
MINUS
SELECT a.*, 'In prod but not dev' description
FROM dev_table a)

关于SQL查询从一个表中返回另一个表中不存在的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19718193/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com