编辑我的 SQL 版本 (mysql 5.7) 不支持 row_number()
...我可以使用什么替代方法?
我研究了一个发现,使用 row_number()
我的查询在哪里应用它...我想检查的列是 user_id
racid
和 ios
SELECT
ur.user_id,
u.racid,
u.fname,
u.lname,
u.email,
u.last_login,
ur.role_id,
r.name AS role_name,
i.device_token AS ios,
dg.group_name,
dg.ad_group,
a.device_token AS android
FROM
users AS u
LEFT OUTER JOIN
user_roles AS ur ON u.id = ur.user_id
LEFT OUTER JOIN
roles AS r ON ur.role_id = r.id
LEFT OUTER JOIN
ios_tokens AS i ON u.racid = i.racf_id
LEFT OUTER JOIN
android_tokens AS a ON u.racid = a.racf_id
LEFT OUTER JOIN
dashboard_groups AS dg ON dg.role_id = r.id
加入后的当前表
user_id, racid, fname, lname, email, last_login, role_id, role_name, ios, group_name, ad_group, android
最佳答案
你可以试试下面它适用于 mysql 8+
select * from
(SELECT
ur.user_id,
u.racid,
u.fname,
u.lname,
u.email,
u.last_login,
ur.role_id,
r.name AS role_name,
i.device_token AS ios,
dg.group_name,
dg.ad_group,
a.device_token AS android,row_number() over(partition by ur.user_id,u.racid,i.device_token order by ur.user_id,
u.racid,i.device_token) as rn
FROM
users AS u
LEFT OUTER JOIN
user_roles AS ur ON u.id = ur.user_id
LEFT OUTER JOIN
roles AS r ON ur.role_id = r.id
LEFT OUTER JOIN
ios_tokens AS i ON u.racid = i.racf_id
LEFT OUTER JOIN
android_tokens AS a ON u.racid = a.racf_id
LEFT OUTER JOIN
dashboard_groups AS dg ON dg.role_id = r.id
)X where rn<>1
或者Mysql 8+以下版本你可以试试看
select * from
( SELECT
ur.user_id,
u.racid,
u.fname,
u.lname,
u.email,
u.last_login,
ur.role_id,
r.name AS role_name,
i.device_token AS ios,
dg.group_name,
dg.ad_group,
a.device_token AS android,
@row_number:=CASE
WHEN @user_id = ur.user_id and @racid = u.racid and @evicetoken = i.device_token THEN @row_number + 1
ELSE 1
END AS num,
@user_id :=ur.user_id, @racid = u.racid, @evicetoken = i.device_token
FROM
users AS u
LEFT OUTER JOIN
user_roles AS ur ON u.id = ur.user_id
LEFT OUTER JOIN
roles AS r ON ur.role_id = r.id
LEFT OUTER JOIN
ios_tokens AS i ON u.racid = i.racf_id
LEFT OUTER JOIN
android_tokens AS a ON u.racid = a.racf_id
LEFT OUTER JOIN
dashboard_groups AS dg ON dg.role_id = r.id,
(SELECT @user_id:=0,@racid=0,@evicetoken=0,@row_number:=0) as t
)X where num<>1
关于MYSQL根据3列去除重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52777224/