请问这样的SQL语句是否存在问题?

haigou20 发布于 2012/08/07 09:36
阅读 215
收藏 0
SQL

select * from (select * from xf_art where flag=3 order by add_time desc) a,(select id userid,username from xf_usr where flag!=9 ) u where a.xfuid=u.userid order by a.add_time desc

以上的sql语句是我一个已离职的同事写,运行正常,但是怎么看都觉得有点别扭,SQL语句这样的写法是否存在问题呢?问题再在哪里(我现在也说不出来,所以请教各位了)

加载中
0
StormFour
StormFour

应该没有问题,就是可读性差了一点。可以用with子句整理一下

0
黄龍
黄龍

语句没有问题吖~相当于

select * from xf_art  a, xf_usr  u where a.flag=3 and u.flag<>9 and a.xfuid=u.userid order by a.add_time desc 
0
螃蟹哥哥
螃蟹哥哥

我觉得很好啊,如果你要完善就是让他更具可读性,把*替换成具体要查询的内容,我们做实际开发都不允许有这样的*号出现的

0
螃蟹哥哥
螃蟹哥哥
还有那个子查询不需要排序也应该可以吧
0
魔力猫
魔力猫
核心是你要看一下执行计划。这个写法可能存在不合理的全表扫描
0
Andre.Z
Andre.Z

先把范围缩小,再做关联,与直接大表关联再过滤的区别。

子查询的order by,毫无意义。

关键在于不同的数据库最后会怎么解析。

0
那天早上
那天早上
不管啥查询都不要用*  因为 * 是遍历所以列去查找, 如果写上查询的列名,这样有目的去查找应该好点
0
JovenShao
JovenShao

不同方法,同结果。

我只看到的是,效率低。

返回顶部
顶部