Mysql 基于查询结果和变量更新表中的记录-结果仅返回变量中第一个int的记录
我想更新表用户中不在表用户操作中的记录,请参见或 我的桌子Mysql 基于查询结果和变量更新表中的记录-结果仅返回变量中第一个int的记录,mysql,sql,mysql-8.0,Mysql,Sql,Mysql 8.0,我想更新表用户中不在表用户操作中的记录,请参见或 我的桌子 Table Users ID | UserName | isActive 1 | Ben Busy | 1 2 | Lui Lazy | 1 <-- never logged in 3 | Emmy Eager | 1 4 | Lana Later | 1 <-- never logged in
Table Users
ID | UserName | isActive
1 | Ben Busy | 1
2 | Lui Lazy | 1 <-- never logged in
3 | Emmy Eager | 1
4 | Lana Later | 1 <-- never logged in
Table UserActions
ID | User_ID | Type | ActionDate
1 | 1 | Login | 2021-01-01 <-- Joe
2 | 3 | Login | 2021-01-02 <-- Eda
3 | 1 | Login | 2021-01-02 <-- Joe
4 | 1 | Login | 2021-01-03 <-- Joe
我无法使用,所以我认为设置@userIDs:=。。。。也应该有效
SET @userIDs := (
SELECT GROUP_CONCAT(ID SEPARATOR ', ') FROM Users u LEFT JOIN UserActions ua
ON u.ID = ua.User_ID
AND (ua.Type = "Login" OR ua.Type = NULL)
WHERE ua.ActionDate IS NULL);
变量@userIDs包含从未登录2,4的所有相关用户ID
但是这个声明
SELECT * FROM Users where ID in (@userIDs);
只返回第一个结果
问题
为什么@myVar中的where ID不起作用?
除了使用a以外,还有其他方法吗?
代码和数据
或许您可以使用:
更新第三方编辑
如果要使用变量,可以使用
然后
SELECT * FROM Users WHERE FIND_IN_SET(Users.ID, @userIDs);
请参阅此这是我试图避免临时表更新用户内部连接从用户中选择u.ID u左连接用户操作u.ID=ua.User\u ID和ua.Type=Login或ua.Type=NULL,其中ua.ActionDate为NULL,作为u.ID=subquery.ID集u.ID=0上的子查询;但它不是在小提琴时间上运行的。注意,没有任何东西等于null,甚至都不等于null。你知道@myVar中的ID为什么不起作用吗?哦,是的。。我记得以前遇到过类似的情况,但我找不到任何关于它的官方MySQL文档。然而,我对来自的解释感到满意。希望能有所帮助
UPDATE Users u
SET u.IsActive=0
WHERE NOT EXISTS
(SELECT user_id FROM UserActions ua
WHERE (ua.Type = "Login" OR ua.Type = NULL) AND u.ID=ua.user_id);
SET @userIDs := (
SELECT GROUP_CONCAT(u.ID SEPARATOR ',') FROM Users u
LEFT JOIN UserActions ua
ON u.ID = ua.User_ID
AND (ua.Type = "Login" OR ua.Type = NULL)
WHERE ua.ActionDate IS NULL);
SELECT * FROM Users WHERE FIND_IN_SET(Users.ID, @userIDs);