在MySQL中使用Join和Insert语句

时间:2015-02-17 03:47:17

标签: mysql

我有一个像这样的插入语句

INSERT INTO T_WorkContents ( user_id, working_date, working_start_time,  
                             working_end_time, break_time, holiday_mark,
                             overtime_hours, overtime_reason, work_detail,
                             remarks, regist_user, regist_date,
                             update_user, update_date )  

VALUES ( '00005', '2015-02-05', '8:0',
         '17:0', '0:0', '0',
         '0:0', NULL, NULL,
          NULL, '00005', current_timestamp(),
         '00005', current_timestamp()
);

我想通过将表workcontent与user_id上的表用户信息相加并且条件为where userinfo.delete_flag = 0来插入新行时检查用户是否已被删除。

有什么办法吗?

2 个答案:

答案 0 :(得分:0)

您可以使用WHERE EXISTS。请尝试以下

INSERT INTO funds (field1, field2)
values (x, xx)
WHERE EXISTS (
   SELECT * 
   FROM table
   WHERE userid = your_user_id
);

答案 1 :(得分:0)

我不确定我理解你的问题。但是,如果您只想在相应的用户存在且仅在其他表中标记为未删除的情况下执行插入,则此操作应该有效:

INSERT INTO T_WorkContents ( user_id, working_date, working_start_time,  
                             working_end_time, break_time, holiday_mark,
                             overtime_hours, overtime_reason, work_detail,
                             remarks, regist_user, regist_date,
                             update_user, update_date )  

SELECT '00005', '2015-02-05', '8:0',
       '17:0', '0:0', '0',
       '0:0', NULL, NULL,
        NULL, '00005', current_timestamp(),
       '00005', current_timestamp()
FROM userinfo ui 
WHERE ui.user_id = '00005' && ui.delete_flag = 0

如果userinfo没有包含user_id等于00005delete_flag设置为0的行,那么select将返回no行和插入查询将不会影响任何行。