尝试像这样更改顺序
SELECT COUNT(id_request) INTO @cnt
注意:您只能在变量中存储一个值。所以在你的问题中你说你只更新了最后一个值..这可能是因为你有一个 AGGREGATE COUNT() 它将所有行合并为一个..除非你使用 group by ...你的变量不会处理多行数据...
如果您想在此操作中使用变量,那么您需要进行一些更改..
SELECT COUNT(id_request) as num_req , id_request, id_file
FROM requests_mandates_rel
WHERE id_file NOT IN (SELECT id_file FROM requests_files_rel)
GROUP BY id_file
选择这个选项,它会给出每个文件的计数,然后用它来做这个。
SELECT GROUP_CONCAT(num_req) INTO @cnt,
GROUP_CONCAT(id_request) INTO @id_req,
GROUP_CONCAT(id_file) INTO @id_file
FROM
( SELECT COUNT(id_request) as num_req , id_request, id_file
FROM requests_mandates_rel
WHERE id_file NOT IN (SELECT id_file FROM requests_files_rel)
GROUP BY id_file
)t
现在要使用连接值,您必须使用 FIND_IN_SET()
UPDATE files_main fm,
( SELECT id_patient
FROM requests_main
WHERE FIND_IN_SET(id_request, @id_req) > 0
) t
SET fm.id_patient = t.id_patient
WHERE fm.id_file IN (@id_file);
我很好奇您是否应该首先使用变量...您不能像这样进行查询吗?
INSERT INTO requests_files_rel (column_for_count, column_for_requestid, column_for_fileid)
( SELECT COUNT(id_request), id_request, id_file
FROM requests_mandates_rel
WHERE id_file NOT IN (SELECT id_file FROM requests_files_rel)
);
UPDATE files_main fm,
( SELECT id_patient
FROM requests_main
WHERE id_request IN
( SELECT id_request
FROM requests_mandates_rel
WHERE id_file NOT IN (SELECT id_file FROM requests_files_rel)
)
) t
SET fm.id_patient = t.id_patient
WHERE fm.id_file IN (@id_file);