【发布时间】:2013-09-10 02:13:58
【问题描述】:
我在触发器中有以下内容,并希望它在返回 NULL 时插入零。在过去的两天里,我在 Stackoverflow 和其他网站上阅读了各种帖子,但一直无法实现我想要的……并且恐怕这不可能……?此查询返回 MCVMoodle.mdl_facetoface_signups.userid 中的所有用户,其计数值为等级(满足 WHERE 条件),计数值为 1 或更多,但没有 0/null。我理解在没有结果/null 的情况下工作的困难,但是当计数为 0/null 时是否有插入零?
INSERT INTO MCVMoodle.mdl_user_info_data_f2fskipcount (userid, fieldid, datab)
SELECT MCVMoodle.mdl_facetoface_signups.userid as 'userid', 4 as 'fieldid',
COUNT(MCVMoodle.mdl_facetoface_signups_status.grade) as 'datab'
FROM
MCVMoodle.mdl_facetoface_signups
LEFT JOIN
MCVMoodle.mdl_facetoface_signups_status on MCVMoodle.mdl_facetoface_signups.id = MCVMoodle.mdl_facetoface_signups_status.signupid
WHERE
MCVMoodle.mdl_facetoface_signups_status.statuscode = 80
AND MCVMoodle.mdl_facetoface_signups_status.superceded = 0
AND MCVMoodle.mdl_facetoface_signups_status.grade = 0
GROUP BY
MCVMoodle.mdl_facetoface_signups.userid;
以下是最终对我有用的查询。感谢 Gordon 在这方面提供的重要帮助。
INSERT INTO MCVMoodle.mdl_user_info_data_f2fskipcount (userid, fieldid, datab)
SELECT MCVMoodle.mdl_facetoface_signups.userid as 'userid', 4 as 'fieldid',
COUNT(MCVMoodle.mdl_facetoface_signups_status.grade) as 'datab'
FROM MCVMoodle.mdl_facetoface_signups LEFT JOIN
MCVMoodle.mdl_facetoface_signups_status
on MCVMoodle.mdl_facetoface_signups.id = MCVMoodle.mdl_facetoface_signups_status.signupid and
MCVMoodle.mdl_facetoface_signups_status.statuscode = 80 AND
MCVMoodle.mdl_facetoface_signups_status.superceded = 0 AND
MCVMoodle.mdl_facetoface_signups_status.grade = 0
GROUP BY MCVMoodle.mdl_facetoface_signups.userid
ON DUPLICATE KEY UPDATE
datab=VALUES(datab);
【问题讨论】:
-
或许不是。如果您的计数返回 NULL,请检查链接的问题。如果根本没有返回任何行,那就是别的东西(可能需要将条件从 WHERE 移动到 ON)。你的问题在这一点上有点含糊。
-
Thilo,谢谢,实际上我确实阅读了您链接的帖子并尝试了那里列出的各种建议,但无法让它们中的任何一个起作用。抱歉我的评论含糊不清……这很可能是因为我缺乏知识。我想当没有行存在时我想要的是零……如果可能的话?我的意思是,当 WHERE 子句中没有符合条件的行时,我会插入 'userid', 4, 0 (这样更有意义吗?)谢谢。