gpt4 book ai didi

sql - 甲骨文子查询

转载 作者:行者123 更新时间:2023-12-02 22:38:45 25 4
gpt4 key购买 nike

我需要设计一个子查询来选择列中具有匹配值的行。

例子

Select * 
from person
where first_name in ('Java','SQL','Oracle');

但是括号内的列表可能很大,最多可达 30,000 个值。我将从文件中读取值并将其传递到括号内。但是我认为我可以在括号内提供的值的数量可能有限制。是否有最佳解决方案来解决这种情况,而无需创建和加载包含数据的新表?

编辑:感谢您的回复。以下查询是否是要考虑的选项 -

Select * 
from person
where first_name like 'Java'
or first_name like 'SQL'
or first_name like 'Oracle';

谢谢。

最佳答案

我同意 Jonathan 的观点,将 30000 个值合并到这里不是可行的方法,而他的解决方案是一个很好的方法。但这里有另一个想法,Oracle 有一个很好的特性,称为外部表。

使用外部表,您可以将文件视为表。如果您的文件结构良好(如 CSV),您可以轻松使用此功能。

Google“Oracle 外部表”,您会找到很多信息和示例,但初学者请阅读 this :

基本上,您需要一个目录对象来告诉 Oracle 您的文件所在的位置,然后您将创建外部表,可能如下所示:

create directory DIR_MYFILE as '/my_source_dir/';

create table EXT_MY_FILE
(
some_id number(8),
some_value varchar2(100)
)
organization external
( default directory DIR_MYFILE
access parameters
( records delimited by newline
fields terminated by ','
)
location ('my_file.csv')
);

在您的查询中使用此表:

select * from person where first_name in (select some_value from EXT_MY_FILE);

编辑:请参阅 APC 的评论,他的观点很好。

关于sql - 甲骨文子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11046455/

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