gpt4 book ai didi

mysql - SQL:如何对表变量添加限制?

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

如何给表变量添加限制(缩小范围)?例如,

select * from Employee e 
where (e.type=1 and e.salary>100) and
(e.type=1 and e.age>20) or
(e.type=1 and e.city='Foo')

有很多e.type=1。对于这个特定的例子,它可以被简化。一般来说,可以用新的表变量(标识符)替换吗?例如,

select * from Employee e 
LEFT join (select e.* where e.type=1) g
where g.salary>100 and g.age>20 or g.city='FOO'

MySQL 错误:未知表 e。

更新

下面这个怎么样?

select * from Employee e 
LEFT join (select * from Employee em) as g on (g.id=e.id and e.type=1)
where g.salary>100 and g.age>20 or g.city='FOO'

使用此类子查询进行联接的性能如何?如果数据库足够智能,那么应该不需要时间来评估动态连接表(子查询),因为连接条件(on)的结果是同一行。对于Mysql、oracle、SQL server、sqlite等流行数据库也是如此吗?

最佳答案

或者,写成:

select e.* 
from Employee e
where e.type = 1 and
(e.salary > 100 or e.age > 20 or e.city = 'Foo');

join 根本不适合此逻辑。没有 on 子句的 join 是一个损坏的查询(MySQL 在某些情况下允许这样做,但几乎没有其他数据库允许)。

关于mysql - SQL:如何对表变量添加限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50176524/

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