gpt4 book ai didi

mysql在where子句中重复子查询

转载 作者:行者123 更新时间:2023-11-29 10:12:27 25 4
gpt4 key购买 nike

我需要在一个查询中从 mysql 5.7.22 中进行选择。

select id from t1 where type_id=(select type_id from t2 where id=1 limit 1) and id not in  
(select obj_id from t2
where
type_id = (select type_id from t2 where id=1 limit 1)
and
type2_id = (select type2_id from t2 where id=1 limit
...
)

我在where子句中有一些重复的子查询(它只是查询的一部分,这个子查询重复了很多次)

'(select type_id from t2 where id=1 limit 1)'

我能否在一个地方弄清楚它,以减少冗长。所以我想选择一次

select type_id, type2_id from t2 where id=1 limit 1

并使 type_id、type2_id 在所有查询上下文中可用。

我知道mysql 8.0有WITH语法,但我使用的是5.7.22

我想在一个没有事务的查询中执行此操作

最佳答案

如果没有看到您更多的查询,我们很难给您提供完整的建议。但你有一些选择。

您可以尝试按如下方式创建 View ,然后使用它。

CREATE VIEW selector
AS SELECT MAX(type_id) type_id, MAX(obj_id) obj_id
FROM t2
WHERE id = 1

看起来 t2 查询可能返回多行。此 View 通过使用 MAX() 而不是 LIMIT 1 来处理此问题。但如果 t2.id 是主键,那么您所需要的就是

CREATE VIEW selector
AS SELECT type_id, obj_id
FROM t2
WHERE id = 1

然后您可以在查询中使用该 View 。

例如

SELECT id
FROM t1
WHERE type_id = (SELECT type_id FROM selector)
AND obj_id <> (SELECT obj_id FROM selector)

或者您可以弄清楚如何使用连接操作而不是子查询。

SELECT id
FROM t1
JOIN selector ON t1.type_id = selector.type_id AND t1.obj_id <> selector.obj_id

关于mysql在where子句中重复子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50738747/

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