dql - 如何从多个列中搜索多个值?
问题描述
我需要在我们的 Documentum/Oracle 数据库中搜索可能存在于多个列中的值列表。
用 OR 语句将它们全部列出似乎会使 dqMan 崩溃!必须有更好的方法来做到这一点......否则我将不得不一次搜索一列。
SELECT DISTINCT
accession_no,
object_name,
title,
subject,
authors,
keywords,
resolution_label,
owner_name,
owner_permit,
group_name,
group_permit,
world_permit,
log_entry,
acl_domain,
acl_name,
language_code,
archive_notes,
archive_status,
pier_authors,
pier_author_ids,
compound_nos,
identifiers,
issued_on,
pier_keywords,
organization,
preferred_terms,
protocol_nos,
source_database,
pier_title,
pier_doc_cnt,
created_by,
created_on,
piera_item_type,
piera_barcode,
piera_container_no,
piera_item_description,
piera_location,
piera_microfilm_location,
piera_microfilm_no,
piera_archive_site,
pier_department,
pier_viewurl,
application_name,
file_paths,
alliance_names,
dmr_content_fk,
FROM
pier_record
WHERE
archive_notes in ('51156','51443','51762','51810','18030','50373','52453','51115','51651','50093','18220','18449','50048','51139','52179','52185','52439','52437','51439','51760','51756','51754','51457','51441','51437','51455','51435','51453','5144 5','50726','CCL1','BCL6','ERAP1','HUSH') OR
compound_nos in ('51156','51443','51762','51810','18030','50373','52453','51115','51651','50093','18220','18449','50048','51139','52179','52185','52439','52437','51439','51760','51756','51754','51457','51441','51437','51455','51435','51453','5144 5','50726','CCL1','BCL6','ERAP1','HUSH') OR
identifiers in ('51156','51443','51762','51810','18030','50373','52453','51115','51651','50093','18220','18449','50048','51139','52179','52185','52439','52437','51439','51760','51756','51754','51457','51441','51437','51455','51435','51453','5144 5','50726','CCL1','BCL6','ERAP1','HUSH') OR
pier_keywords in ('51156','51443','51762','51810','18030','50373','52453','51115','51651','50093','18220','18449','50048','51139','52179','52185','52439','52437','51439','51760','51756','51754','51457','51441','51437','51455','51435','51453','5144 5','50726','CCL1','BCL6','ERAP1','HUSH') OR
organization in ('51156','51443','51762','51810','18030','50373','52453','51115','51651','50093','18220','18449','50048','51139','52179','52185','52439','52437','51439','51760','51756','51754','51457','51441','51437','51455','51435','51453','5144 5','50726','CCL1','BCL6','ERAP1','HUSH') OR
protocol_nos in ('51156','51443','51762','51810','18030','50373','52453','51115','51651','50093','18220','18449','50048','51139','52179','52185','52439','52437','51439','51760','51756','51754','51457','51441','51437','51455','51435','51453','5144 5','50726','CCL1','BCL6','ERAP1','HUSH')
ENABLE
(ROW_BASED)
解决方案
我不确定您是否可以将公共表表达式 (CTE) 与 DQL 一起使用,但如果您正在搜索具有相同值的多个字段,则此处可能有意义:
WITH cte_value_lookup (MyValue) AS (
SELECT '51156' UNION ALL
SELECT '51443' UNION ALL
...
SELECT 'HUSH'
)
SELECT DISTINCT
accession_no,
object_name,
...
dmr_content_fk,
FROM
pier_record
WHERE
archive_notes in (SELECT MyValue FROM cte_value_lookup) OR
compound_nos in (SELECT MyValue FROM cte_value_lookup) OR
identifiers in (SELECT MyValue FROM cte_value_lookup) OR
pier_keywords in (SELECT MyValue FROM cte_value_lookup) OR
organization in (SELECT MyValue FROM cte_value_lookup) OR
protocol_nos in (SELECT MyValue FROM cte_value_lookup)
ENABLE
(ROW_BASED)
不确定这是否会加快速度,但需要研究一下。
另一种方法是在这些字段(archive_notes、compound_nos 等)上添加索引,但这可能并不理想。
推荐阅读
- javascript - AngularJS:使用 $templateCache 自定义 ui-select 模板
- vue.js - VueJS ReferenceError:提交注册表时未定义结果
- spring - 将常量迁移到属性文件但过滤器无法访问道具文件
- python - 创建新 DataFrame 列的问题
- python - Pygame 使用 os.path.join() 说 png 不支持的图像格式
- r - 执行并行操作时随机停止
- amazon-web-services - 在许多 lambda 函数之间共享“初始化阶段”
- ocaml - 从 OCaml 中的一些 x 中获取 x
- linux - 在概念上将用户虚拟地址、内核逻辑地址和内核虚拟地址捆绑在一起
- android - 带有 Workmanager 的 Flutter Provider