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);