gpt4 book ai didi

sql - 如何避免对 IN 子句重复此子查询?

转载 作者:行者123 更新时间:2023-12-01 15:35:23 24 4
gpt4 key购买 nike

我有一个 SQL 脚本(当前针对 SQLite 运行,但它可能应该针对任何数据库引擎运行),它两次使用相同的子查询,并且因为它可能正在获取大量记录(该表有几百万行)我我想只调用一次。

查询的缩短伪版本如下所示:

SELECT * FROM
([the subquery, returns a column of ids]) AS sq
[a couple of joins, that fetches things from other tables based on the ids]
WHERE thisorthat NOT IN ([the subquery again])

我尝试以各种方式使用名称( sq )(带/不带括号,带/不带命名 sq 列等)但无济于事。

我真的必须重复这个子查询吗?

澄清:
我在 python 和 sqlite 中这样做是作为一个可以完成的小演示,但我希望我的解决方案尽可能地扩展并尽可能少地修改。在实际情况下,数据库将有几百万行,但在我的示例中,只有 10 行包含虚拟数据。因此,可以在例如 MySQL 上很好地优化的代码绝对足够好 - 它不必专门针对 SQLite 进行优化。但正如我所说,需要的修改越少越好。

最佳答案

有一个WITH标准 SQL 中的子句,但是,我不知道 SQLlite 是否支持它——当然值得一试:

WITH mySubQuery AS
(
[the subquery code]
)

SELECT * FROM
mySubQuery AS sq
[a couple of joins, that fetches things from other tables based on the ids]
WHERE thisorthat NOT IN (mySubQuery)

也就是说,对于超过几千行的任何数据集,您在此处所做的操作可能会非常缓慢,因此如果可能,我会尝试对其进行改造 - NOT IN一般应该避免,特别是如果你也有几个连接。

关于sql - 如何避免对 IN 子句重复此子查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5470415/

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