[英]SQL update value to be value from another table
我有三個可以全部由某些ID連接的表,並且我需要基於其中一個表中已經存在的值來填充新列。
這是模式:
CREATE TABLE `users` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`user_attendance_code_group` int(11) DEFAULT '18',
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
INSERT INTO users (user_attendance_code_group) VALUES
(1),
(1),
(3),
(2),
(2),
(2);
CREATE TABLE `attendance_time_index` (
`time_index_id` int(11) NOT NULL AUTO_INCREMENT,
`time_index_value` varchar(45) NOT NULL,
`time_index_user_id` int(11) NOT NULL,
`time_index_default` varchar(11) DEFAULT NULL,
PRIMARY KEY (`time_index_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
INSERT INTO attendance_time_index (time_index_value, time_index_user_id) VALUES
('AM', 3),
('PM', 3),
('AM', 4),
('PM', 4),
('AM', 5),
('PM', 5),
('AM', 6),
('PM', 6),
('AM', 7),
('PM', 7),
('AM', 8),
('PM', 8);
CREATE TABLE `attendance_code_groups` (
`group_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`group_am_default` varchar(3) DEFAULT NULL,
`group_pm_default` varchar(3) DEFAULT NULL,
PRIMARY KEY (`group_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
INSERT INTO attendance_code_groups (group_am_default, group_pm_default) VALUES
('A','B'),
('X','Y'),
('1','2');
我需要更新time_index_default
同來自值列group_am_default
或group_pm_default
取決於值是否在time_index_value
(上午或下午)
更新查詢將是什么?
我嘗試了以下操作,但是子查詢返回的行多...
UPDATE attendance_time_index SET time_index_default = (
SELECT test FROM (SELECT CASE WHEN ati.time_index_value = 'PM' THEN acg.group_pm_default ELSE acg.group_am_default END AS test
FROM attendance_time_index ati
JOIN users u ON ati.time_index_user_id = u.user_id
JOIN attendance_code_groups acg ON u.user_attendance_code_group = acg.group_id) AS x)
如果有幫助,這里有一個SQLFiddle ... http://sqlfiddle.com/#!2/1846e/4
UPDATE attendance_time_index ati
JOIN users u ON ati.time_index_user_id = u.user_id
JOIN attendance_code_groups acg ON u.user_attendance_code_group = acg.group_id
SET ati.time_index_default = CASE WHEN ati.time_index_value = 'PM' THEN acg.group_pm_default ELSE acg.group_am_default END;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.