MySQL 包含插入和更新的案例
MySQL Case with Insert and Update
我需要帮助编写条件查询以将数据从一个 table 复制到另一个,一切都非常简单,直到我决定要在我的应用程序中包含版本控制!
我看过一些示例,但它们主要面向创建 mysql 过程,这是我尝试过的:
SELECT CASE
WHEN NOT EXISTS (
SELECT `version`
FROM `archive_courses`
WHERE `original_course_id` = '$course_id'
AND `version` = '$current_version'
)
THEN
BEGIN
INSERT INTO `archive_course_users` <------ syntax error
(`course_id`, `user_id`, `course_qty`)
SELECT @new_course_id, '$user_id', `course_qty`
FROM `current_course_users`
WHERE `course_id` = '$course_id'
AND `user_id` = '$user_id'
END
ELSE
BEGIN
UPDATE `archive_course_users`
SET `course_qty` = (SELECT `course_qty` FROM `current_course_users` WHERE `user_id` = '$user_id')
WHERE `original_course_id` = '$course_id'
AND `user_id` = '$user_id'
END
END
END
看起来这个案例工作正常/OK/ 但是当它到达我的 INSERT
查询时抛出语法错误。 我应该怎么做?
它不应该那样工作。将您的查询更改为
INSERT INTO `archive_course_users`
(`course_id`, `user_id`, `course_qty`)
SELECT @new_course_id, '$user_id', `course_qty`
FROM `current_course_users`
WHERE `course_id` = '$course_id'
AND `user_id` = '$user_id'
AND NOT EXISTS (
SELECT 1
FROM `archive_courses`
WHERE `original_course_id` = '$course_id'
AND `version` = '$current_version');
你试过了吗"insert.. on duplicate key update"
?
这是 mysql 手册中的示例:
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;
UPDATE table SET c=c+1 WHERE a=1;
http://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html
希望对您有所帮助
根据@Rahul 的回答,我创建了两个查询:
//INSERT IF NOT EXISTS
INSERT INTO `archive_course_users`
(`course_id`, `user_id`, `course_qty`)
SELECT @new_course_id, '$user_id', `course_qty`
FROM `current_course_users`
WHERE NOT EXISTS (
SELECT `version`
FROM `archive_courses`
WHERE `original_course_id` = '$course_id'
AND `version` = '$current_version'
)
AND `course_id` = '$course_id'
AND `user_id` = '$user_id'
//UPDATE IF EXISTS
UPDATE `archive_course_users`
SET `course_qty` = (SELECT `course_qty` FROM `current_course_users` WHERE `user_id` = '$user_id')
WHERE EXISTS (
SELECT `version`
FROM `archive_courses`
WHERE `original_course_id` = '$course_id'
AND `version` = '$current_version'
)
AND `original_course_id` = '$course_id'
AND `user_id` = '$user_id'
SELECT
中不能有语句。所以要么
将代码移出SELECT
:
IF (...) THEN -- Note: No "CASE"; not "WHEN"
INSERT ...
ELSE
UPDATE
END IF
或SELECT
某种标志,然后在外面使用IF
语句。
我需要帮助编写条件查询以将数据从一个 table 复制到另一个,一切都非常简单,直到我决定要在我的应用程序中包含版本控制!
我看过一些示例,但它们主要面向创建 mysql 过程,这是我尝试过的:
SELECT CASE
WHEN NOT EXISTS (
SELECT `version`
FROM `archive_courses`
WHERE `original_course_id` = '$course_id'
AND `version` = '$current_version'
)
THEN
BEGIN
INSERT INTO `archive_course_users` <------ syntax error
(`course_id`, `user_id`, `course_qty`)
SELECT @new_course_id, '$user_id', `course_qty`
FROM `current_course_users`
WHERE `course_id` = '$course_id'
AND `user_id` = '$user_id'
END
ELSE
BEGIN
UPDATE `archive_course_users`
SET `course_qty` = (SELECT `course_qty` FROM `current_course_users` WHERE `user_id` = '$user_id')
WHERE `original_course_id` = '$course_id'
AND `user_id` = '$user_id'
END
END
END
看起来这个案例工作正常/OK/ 但是当它到达我的 INSERT
查询时抛出语法错误。 我应该怎么做?
它不应该那样工作。将您的查询更改为
INSERT INTO `archive_course_users`
(`course_id`, `user_id`, `course_qty`)
SELECT @new_course_id, '$user_id', `course_qty`
FROM `current_course_users`
WHERE `course_id` = '$course_id'
AND `user_id` = '$user_id'
AND NOT EXISTS (
SELECT 1
FROM `archive_courses`
WHERE `original_course_id` = '$course_id'
AND `version` = '$current_version');
你试过了吗"insert.. on duplicate key update"
?
这是 mysql 手册中的示例:
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;
UPDATE table SET c=c+1 WHERE a=1;
http://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html
希望对您有所帮助
根据@Rahul 的回答,我创建了两个查询:
//INSERT IF NOT EXISTS
INSERT INTO `archive_course_users`
(`course_id`, `user_id`, `course_qty`)
SELECT @new_course_id, '$user_id', `course_qty`
FROM `current_course_users`
WHERE NOT EXISTS (
SELECT `version`
FROM `archive_courses`
WHERE `original_course_id` = '$course_id'
AND `version` = '$current_version'
)
AND `course_id` = '$course_id'
AND `user_id` = '$user_id'
//UPDATE IF EXISTS
UPDATE `archive_course_users`
SET `course_qty` = (SELECT `course_qty` FROM `current_course_users` WHERE `user_id` = '$user_id')
WHERE EXISTS (
SELECT `version`
FROM `archive_courses`
WHERE `original_course_id` = '$course_id'
AND `version` = '$current_version'
)
AND `original_course_id` = '$course_id'
AND `user_id` = '$user_id'
SELECT
中不能有语句。所以要么
将代码移出SELECT
:
IF (...) THEN -- Note: No "CASE"; not "WHEN"
INSERT ...
ELSE
UPDATE
END IF
或SELECT
某种标志,然后在外面使用IF
语句。