sql left join on

1  查询字段数据,可以直接使用字段别名查询。

SELECT 系统, ob_id AS 服务器, 凭证个数, 使用凭证, 使用时长(秒)
, 使用次数, 最后使用人, 最后使用时间
FROM (
SELECT ra_target_resource_id, ra_credential_id AS 使用凭证
, SUM(TIMESTAMPDIFF(SECOND, ra_start_time, ra_end_time)) AS 使用时长(秒)
, COUNT(ra_credential_id) AS 使用次数, gs_requester_id AS 最后使用人
, MAX(ra_start_time) AS 最后使用时间 FROM am_ucmrecordedapp

2  usageLog   虚拟表 别名 as 别名 (as可以去掉)

am_ucmrecordedapp    左表
LEFT JOIN
am_ucmgwsession
左连接 查询

1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉



SELECT 系统, ob_id AS 服务器, 凭证个数, 使用凭证, 使用时长(秒)
, 使用次数, 最后使用人, 最后使用时间
FROM (
SELECT ra_target_resource_id, ra_credential_id AS 使用凭证
, SUM(TIMESTAMPDIFF(SECOND, ra_start_time, ra_end_time)) AS 使用时长(秒)
, COUNT(ra_credential_id) AS 使用次数, gs_requester_id AS 最后使用人
, MAX(ra_start_time) AS 最后使用时间
FROM am_ucmrecordedapp
LEFT JOIN am_ucmgwsession ON ra_short_session_id = gs_short_session_id
WHERE (ra_credential_id != 'null'
AND ra_end_time != 'null'
AND ra_start_time > '2018-01-01'
AND ra_end_time < '2018-12-31')
GROUP BY ra_credential_id
) usageLog
LEFT JOIN (
SELECT ob_description AS 系统, ob_id, COUNT(cr_targetrsc_uuid) AS 凭证个数
FROM am_object
LEFT JOIN am_ucmcred ON cr_targetrsc_uuid = ob_uuid
WHERE ob_object_class = 'PasswordTargetResource'
GROUP BY cr_targetrsc_uuid
ORDER BY ob_description
) connInfo
ON usageLog.ra_target_resource_id = connInfo.ob_id
WHERE 系统 = 'centos'
ORDER BY connInfo.系统;

猜你喜欢

转载自www.cnblogs.com/TangGe520/p/10080157.html