只有在满足来自另一个表SQL的特定条件时插入表中

时间:2018-01-28 14:40:18

标签: sql sql-update mamp

我有一个叫Create_Group的表。我想添加一个约束,只有具有user_type人员的人才能在表Create_group中插入。

 CREATE TABLE `User` 
 ( 
      `user_id` varchar(10) NOT NULL,    
      `username` varchar(20) NOT NULL,    
      `user_type` varchar(20) NOT NULL,  
      CONSTRAINT UC_User UNIQUE (user_id,username)  
) ENGINE=InnoDB DEFAULT CHARSET=latin1;  


ALTER TABLE `User` ADD PRIMARY KEY (`user_id`);  

我试过这样做:

CREATE TABLE `Create_Group` 
(  
     `group_id` varchar(10) NOT NULL,  
     `user_id` varchar(10) NOT NULL,  
     `group_creator` varchar(20) NOT NULL,  
     `group_name` varchar(50) NOT NULL,  
     CONSTRAINT UC_Group UNIQUE (group_id,group_name)  
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

ALTER TABLE `Create_Group` 
    ADD PRIMARY KEY (`group_id`),  
    ADD KEY (`user_id`); 

UPDATE `Create_Group`   
SET `group_id`,`user_id`,`group_creator`,`group_name`,`date_created`  
WHERE (SELECT user_type  
       FROM User  
       WHERE `group_creator`=username) = `Staff` 

然而,更新不断给我一个错误。

用户输入示例:

INSERT INTO `User` (`user_id`, `username`, `user_type`)   
VALUES (UUID(), 'TheDoctor', 'Staff'), (UUID(), 'DoctorStrange', 'User');

Group_Create的输入示例:

INSERT INTO `Create_Group` (`group_id`, `user_id`, `group_creator`, `group_name`, `date_created`)   
    SELECT 
        UUID(),user_id,'TheDoctor','HeroesUnited', CURRENT_TIMESTAMP()  
    FROM 
        User  
    WHERE 
        username='TheDoctor'   

提前致谢!

1 个答案:

答案 0 :(得分:0)

您可能正在使用的SQL数据库。此更新似乎不正确,因为没有为其分配值

以下似乎不正确

UPDATE `Create_Group`   
SET `group_id`,`user_id`,`group_creator`,`group_name`,`date_created`  
WHERE (SELECT user_type  
       FROM User  
       WHERE `group_creator`=username) = `Staff` 

尝试为SET中的字段分配一些值,如:

请注意,这只是如何更正更新查询的示例:

UPDATE `Create_Group`   
SET `group_id` = '1',`user_id` = '2',`group_creator`='3',`group_name`='name',`date_created`='2017-01-01'  
WHERE (SELECT user_type  
       FROM User  
       WHERE `group_creator`=username) = `Staff`

此外,您应该处理WHERE子句查询。如果子查询将返回多于1条记录

(SELECT user_type FROM User WHERE group_creator=username)

然后更新将失败并显示错误

  

用作表达式

的子查询返回的多行