Mysql 具有子查询的过程中的游标

Mysql 具有子查询的过程中的游标,mysql,sql,cursor,Mysql,Sql,Cursor,我在MySQL中有这个过程(它的一部分) 我有一些有线的事情发生(游标不带任何值),例如这个查询 SELECT user_id FROM user_rights WHERE user_rights.right = 101 AND user_rights.group_id = ( SELECT posted_in FROM posts WHERE id = arg_post_id ) 返回在发布帖子的组中拥有权限101(读取)的所有用户。例如,

我在MySQL中有这个过程(它的一部分)

我有一些有线的事情发生(游标不带任何值),例如这个查询

SELECT user_id 
FROM user_rights 
WHERE user_rights.right = 101 AND 
user_rights.group_id  = 
(
    SELECT 
    posted_in
    FROM posts
    WHERE
    id = arg_post_id
)
返回在发布帖子的组中拥有权限101(读取)的所有用户。例如,结果在sql中工作得非常好

SELECT user_id 
FROM user_rights 
WHERE user_rights.right = 101 AND 
user_rights.group_id  = 
(
    SELECT 
    posted_in
    FROM posts
    WHERE
    id = 247
)

RESULT
user_id
1
3
2
16
17
20
19  
但是当我尝试从
光标输出时

/* Increment the notifications for every afected user */
INSERT INTO t VALUES(0);
OPEN c1;
read_loop: LOOP
    FETCH c1 INTO var_user_id;
        IF done THEN
            LEAVE read_loop;
        ELSE
            INSERT INTO t VALUES(var_user_id);
        END IF;
END LOOP;
CLOSE c1;

它不起作用。。。它只在
t
表中写入“0”为什么?我不能在游标中使用子查询

它不起作用,因为光标是非敏感的,这意味着它指向真实数据。它不适用于这样的子查询:

DECLARE c1 CURSOR FOR 
    SELECT user_id 
    FROM user_rights 
    WHERE user_rights.right = 101 AND 
    user_rights.group_id  = 
    (
        SELECT 
        posted_in
        FROM posts
        WHERE
        id = arg_post_id
    )
    ORDER BY user_id DESC;

据我所知,游标不能用子查询声明

DECLARE c1 CURSOR FOR 
    SELECT user_id 
    FROM user_rights 
    WHERE user_rights.right = 101 AND 
    user_rights.group_id  = 
    (
        SELECT 
        posted_in
        FROM posts
        WHERE
        id = arg_post_id
    )
    ORDER BY user_id DESC;