gpt4 book ai didi

SQL查询获取不在表中的id

转载 作者:行者123 更新时间:2023-12-02 18:56:54 24 4
gpt4 key购买 nike

给定 ID 列表,我需要确定那些不在 Oracle 数据库中的 ID。例如,给定表格:

我的表

+----+-------+
| ID | DATA |
+----+-------+
| 1 | Foo |
+----+-------+
| 3 | Bar |
+------------+
| 5 | Etc |
+------------+

...给定列表 [1, 2, 3, 4],我需要列表 [2, 4]。

我使用 MINUS 子句想出了这个语法:

SELECT '1' as id FROM dual
UNION
SELECT '2' as id FROM dual
UNION
SELECT '3' as id FROM dual
UNION
SELECT '4' as id FROM dual
MINUS
SELECT id FROM my_table WHERE id IN ('1','2','3','4')

但这看起来非常笨拙,而且很快就会变得困惑,因为实际上我一次会处理数百个 ID。 是否有比 UNION 语法更好的语法来获取值列表?

一些效果:

/* Pseudo code */
SELECT id FROM VALUES ('1', '2', '3', '4')
MINUS
SELECT id FROM my_table WHERE id IN ('1','2','3','4')

另一种选择是以编程方式进行。我可以在数据库中查询现有的 ID。然后在代码中,我可以删除从原始列表中找到的列表,以获取不在数据库中的子列表。这可行,但我认为让数据库完成这项工作会更有效,这不是正确的吗?

谢谢

最佳答案

如此处所述:如何 how-to-convert-csv-to-table-in-oracle您可以将值列表转换为表格。

之后,事情就简单了:

select * from table(splitter('a,b,c,d'))
minus
select id from my_table;

select 
column_value as id
from table(splitter('a,b,c,d')) a
left join my_table b on (a.column_value = b.id)
where b.id is null;

关于SQL查询获取不在表中的id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8663727/

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