MySQL 查询尝试不使用 SELECT IN
MySQL query trying not to use SELECT IN
我有一个像这样的大查询:
SELECT Id , Nuser FROM t_logs
WHERE Nuser IN
(
SELECT t_user.kit.idUser
FROM t_kit
RIGHT JOIN t_user_kit ON t_user_kit.Nkit = t_kit.Nkit
LEFT JOIN t_user_master ON t_user_master.Nmaster = t_user_kit.idUser
WHERE Tkit='BOX1'
)
子查询 returns 一个用户列表,然后我从 t_log 中获取包含任何这些用户 (IN) 的所有行。
但我听说 SELECT IN 性能不佳,我不知道如何以其他方式创建此查询。有任何想法吗?谢谢!
加入子查询:
SELECT Id, Nuser
FROM t_logs AS l
JOIN (SELECT DISTINCT uk.idUser
FROM t_kit AS k
RIGHT JOIN t_user_kit AS uk ON uk.nKit = k.nKit
LEFT JOIN t_user_master AS um ON um.nMaster = uk.idUser
WHERE tKit = 'BOX1') AS k ON l.nUser = k.idUser
如果子查询 returns 多行具有相同的 idUser
,则子查询中的 DISTINCT
可防止连接产生重复行。如果那不可能,您可以删除该修饰符。
我有一个像这样的大查询:
SELECT Id , Nuser FROM t_logs
WHERE Nuser IN
(
SELECT t_user.kit.idUser
FROM t_kit
RIGHT JOIN t_user_kit ON t_user_kit.Nkit = t_kit.Nkit
LEFT JOIN t_user_master ON t_user_master.Nmaster = t_user_kit.idUser
WHERE Tkit='BOX1'
)
子查询 returns 一个用户列表,然后我从 t_log 中获取包含任何这些用户 (IN) 的所有行。
但我听说 SELECT IN 性能不佳,我不知道如何以其他方式创建此查询。有任何想法吗?谢谢!
加入子查询:
SELECT Id, Nuser
FROM t_logs AS l
JOIN (SELECT DISTINCT uk.idUser
FROM t_kit AS k
RIGHT JOIN t_user_kit AS uk ON uk.nKit = k.nKit
LEFT JOIN t_user_master AS um ON um.nMaster = uk.idUser
WHERE tKit = 'BOX1') AS k ON l.nUser = k.idUser
如果子查询 returns 多行具有相同的 idUser
,则子查询中的 DISTINCT
可防止连接产生重复行。如果那不可能,您可以删除该修饰符。