【问题标题】:Only insert in table when it meets certain condition from another table SQL仅在满足来自另一个表 SQL 的特定条件时才插入表中
【发布时间】:2018-01-28 14:40:17
【问题描述】:

我有一个名为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'   

提前致谢!

【问题讨论】:

  • 为什么每个表名和列名都使用特殊字符`?还有什么是你得到的错误?请在这个问题中标记正确的数据库 SQL server、msAccess...等

标签: sql sql-update mamp


【解决方案1】:

您可能使用的任何 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)

那么更新将失败并出现错误

用作表达式的子查询返回多于一行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 2011-05-13
    • 2021-08-25
    • 1970-01-01
    • 2016-03-09
    • 2021-08-21
    • 1970-01-01
    相关资源
    最近更新 更多