gpt4 book ai didi

sql - 如何克服sql查询中IN原因的限制

转载 作者:行者123 更新时间:2023-12-02 22:26:43 24 4
gpt4 key购买 nike

我写了一个像这样的 sql 查询:

select field1, field2 from table_name;

问题是此查询将返回 100 万条记录/或超过 10 万条记录。我有一个目录,其中包含包含 field1 的输入文件(大约 20,000 到 50,000 条记录)。这是我关心的主要数据。使用 perl 脚本,我从目录中提取。但是,如果我编写如下查询:

select field1 , field2 from table_name 
where field1 in (need to write a query to take field1 from directory);

如果我使用 IN cause 那么它有处理 1000 个条目的限制,那么我应该如何克服 IN cause 的限制?

最佳答案

在任何 DBMS 中,我会将它们插入临时表并执行 JOIN 以解决 IN 子句对列表大小的限制。

例如

CREATE TABLE #idList
(
ID INT
)
INSERT INTO #idList VALUES(1)
INSERT INTO #idList VALUES(2)
INSERT INTO #idList VALUES(3)

SELECT *
FROM
MyTable m
JOIN #idList AS t
ON m.id = t.id

在 SQL Server 2005 中,在我们之前的一个项目中,我们曾经将查询另一个数据存储(lucene 索引)的结果值列表转换为 XML,并将其作为 XML 变量传递到 SQL 查询中并转换在 XML 数据类型上使用 nodes() 函数将其转换为一个表,并使用它执行 JOIN

DECLARE @IdList XML
SELECT @idList = '
<Requests>
<Request id="1" />
<Request id="2" />
<Request id="3" />
</Requests>'

SELECT *
FROM
MyTable m
JOIN (
SELECT id.value('(@id)[1]', 'INT') as 'id'
FROM @idList.nodes('/Requests/Request') as T(id)
) AS t
ON m.id = t.id

关于sql - 如何克服sql查询中IN原因的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12873737/

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