下面那个效率高 一 SELECT a.user_id as userId, b.user_name as userName, a.nick_name as nickName, b.access_time as accessTime FROM sys_user a INNER JOIN (SELECT user_name , min(access_time) as access_time FROM `sys_logininfor` WHERE `status` = '0' and msg = '登录成功' and DATE_FORMAT(access_time,'%Y-%m-%d') = CURRENT_DATE() GROUP BY user_name) b ON a.user_name = b.user_name and user_id='1' 二 SELECT a.user_id as userId, b.user_name as userName, a.nick_name as nickName, b.access_time as accessTime FROM ( SELECT user_id , user_name , nick_name FROM sys_user where user_id='1' ) a INNER JOIN (SELECT user_name , min(access_time) as access_time FROM `sys_logininfor` WHERE `status` = '0' and msg = '登录成功' and DATE_FORMAT(access_time,'%Y-%m-%d') = CURRENT_DATE() GROUP BY user_name) b ON a.user_name = b.user_name
时间: 2024-04-28 21:27:19 浏览: 8
第二个 SQL 语句的效率可能更高。因为它先通过子查询过滤了 sys_user 表中的数据,只保留了符合条件的一行数据,然后再和 sys_logininfor 表进行 INNER JOIN。而第一个 SQL 语句则是直接将 sys_user 表和 sys_logininfor 表进行 INNER JOIN,然后再通过 WHERE 条件过滤数据。因此第二个 SQL 语句可以减少 INNER JOIN 的数据量,提高查询效率。但是具体哪个更高效,还需要看具体情况。
相关问题
下面那个效率高 一 SELECT a.user_id as userId, b.user_name as userName, a.nick_name as nickName, b.access_time as accessTime FROM sys_user a INNER JOIN (SELECT user_name , min(access_time) as access_ti
我无法判断哪个效率更高,因为你截断了 SQL 语句。但是可以看出第一个 SQL 语句使用了 LEFT JOIN,而第二个 SQL 语句使用了 INNER JOIN。一般来说,INNER JOIN 的效率会高于 LEFT JOIN,因为 INNER JOIN 只会返回两个表中有匹配关系的行,而 LEFT JOIN 则会返回左表中的所有行和右表中匹配的行。但是具体哪个更高效,还需要看具体情况。
SELECT DISTINCT rror.recyclebin_id AS recyclebinId, rdt.name AS recyclebinName, sur.phonenumber AS phone, sur.nick_name AS nickName FROM re_order ror INNER JOIN re_recyclebin_order rror ON rror.id = ror.recyclebin_order_id INNER JOIN re_digit_recyclebin rdt ON rdt.id = rror.recyclebin_id left join sys_user sur ON rdt.admin_id = sur.user_id WHERE ror.order_status = '50' AND order_user = #{userId} Order By ror.complete_time DESC 影响了顺序,帮我改一下
可以将 Order By 子句放在整个 SQL 语句的最后,如下所示:
SELECT DISTINCT
rror.recyclebin_id AS recyclebinId,
rdt.name AS recyclebinName,
sur.phonenumber AS phone,
sur.nick_name AS nickName
FROM
re_order ror
INNER JOIN re_recyclebin_order rror ON rror.id = ror.recyclebin_order_id
INNER JOIN re_digit_recyclebin rdt ON rdt.id = rror.recyclebin_id
LEFT JOIN sys_user sur ON rdt.admin_id = sur.user_id
WHERE
ror.order_status = '50'
AND order_user = #{userId}
ORDER BY
ror.complete_time DESC