我需要在一个查询中选择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\u id、type2\u id在所有查询上下文中可用。
我知道MySQL8.0有很多语法,但我使用的是5.7.22
我想在一个没有事务的查询中实现这一点。
2条答案
按热度按时间pgccezyw1#
你很难给出完整的建议而不看到你更多的疑问。但你有一些选择。
您可以尝试创建一个视图,如下所示,然后使用它。
看起来有可能
t2
查询返回多行。这个视图通过使用MAX()
而不是LIMIT 1
. 但如果t2.id
是主键,那么你只需要然后可以在查询中使用视图。
例如
或者您可以找出如何使用联接操作而不是子查询。
68bkxrlz2#
试试这个