SQL将第三个表中有数据配对的其他两个表中缺少的记录插入第三个表

SQL将第三个表中有数据配对的其他两个表中缺少的记录插入第三个表,sql,join,insert,multiple-tables,Sql,Join,Insert,Multiple Tables,我有三个表格,在这里浓缩到从最初的8/20/14后修改的相关列: 代码、代码、描述、, EMP EMP代码,名字,姓氏 EMPCODE,WAGECODE,DESCRIPTION,FIRSTNAME,LASTNAME 有5个唯一的代码。每个代码记录都有一个描述。 有5个唯一的EMP.EMPCODE,分别有名字和姓氏 EMP工资表中的5条EMP.EMPCODE 25记录中的每一条都应有5条记录 我在SQLFiddle上的模式包括16条需要的记录,还有9条需要记录。 我有以下代码,用于隔离9条记录所需

我有三个表格,在这里浓缩到从最初的8/20/14后修改的相关列:

代码、代码、描述、, EMP EMP代码,名字,姓氏 EMPCODE,WAGECODE,DESCRIPTION,FIRSTNAME,LASTNAME 有5个唯一的代码。每个代码记录都有一个描述。 有5个唯一的EMP.EMPCODE,分别有名字和姓氏

EMP工资表中的5条EMP.EMPCODE 25记录中的每一条都应有5条记录

我在SQLFiddle上的模式包括16条需要的记录,还有9条需要记录。 我有以下代码,用于隔离9条记录所需的数据:

SELECT E.EMPCODE, C.WAGECODE, C.DESCRIPTION, E.FIRSTNAME, E.LASTNAME
FROM
(EMP E CROSS JOIN CODES C)
    LEFT JOIN EMPWAGE EW ON E.EMPCODE = EW.EMPCODE AND C.WAGECODE = EW.WAGECODE
WHERE NOT EXISTS
      (SELECT 1
       FROM EMPWAGE EW
       WHERE
           E.EMPCODE = EW.EMPCODE AND C.WAGECODE = EW.WAGECODE
      )
但是,我仍然坚持使用SQLFIDLE插入此数据记录的过程: 我非常感谢你的帮助

在上面的第一行中添加以下内容时,我的SQLFIDLE在运行后保持不变

INSERT INTO EMPWAGE (EMPCODE, WAGECODE, DESCRIPTION, FIRSTNAME, LASTNAME)
用于SQLFiddler的架构:


您使用的是MySQL还是SQL Server?在我的书中,请为MySQL发布一个“修复一次”,定义一个合适的唯一键&只需为整个集群运行一个INSERT-IGNORE查询就可以了。如果必须定期运行,则不会。事实上,您从ErikE列出的查询针对三个表,如果您理解SQL,应该可以正常工作。我已根据要求创建了一个SQLFiddler,希望我是正确的,允许访问。请随时用勺子喂我,因为这是我第一次在这个网站上。黑暗的
CREATE TABLE CODES (WAGECODE varchar(5) NOT NULL, DESCRIPTION varchar(30) NULL);

Insert into CODES values ('001', 'RegHours');
Insert into CODES values ('003', 'Holiday');
Insert into CODES values ('008', 'Sick');
Insert into CODES values ('010', 'PCH');
Insert into CODES values ('397', 'Comp');

CREATE TABLE EMP (EMPCODE varchar(11) NOT NULL, FIRSTNAME varchar(15) NULL,
LASTNAME varchar(15) NULL);

Insert into EMP values ('BretV', 'Bret', 'Vick');
Insert into EMP values ('CarlS', 'Carl', 'Shaw');
Insert into EMP values ('MaryC', 'Mary', 'Comb');
Insert into EMP values ('RickK', 'Rick', 'Kite');
Insert into EMP values ('TamiB', 'Tami', 'Ball');


CREATE TABLE EMPWAGE (EMPCODE varchar(11) NOT NULL, WAGECODE varchar(7) NOT NULL,
DESCRIPTION varchar(30) NULL, FIRSTNAME varchar(15) NULL, LASTNAME varchar(15) NULL);

Insert into EMPWAGE values ('BretV', '001', 'RegHours', 'Bret', 'Vick');
Insert into EMPWAGE values ('BretV', '003', 'Holiday',  'Bret', 'Vick');
Insert into EMPWAGE values ('BretV', '008', 'Sick',     'Bret', 'Vick');
Insert into EMPWAGE values ('BretV', '010', 'PCH',      'Bret', 'Vick');
Insert into EMPWAGE values ('BretV', '397', 'Comp',     'Bret', 'Vick');
Insert into EMPWAGE values ('CarlS', '001', 'RegHours', 'Carl', 'Shaw');
Insert into EMPWAGE values ('CarlS', '010', 'PCH',      'Carl', 'Shaw');
Insert into EMPWAGE values ('MaryC', '001', 'RegHours', 'Mary', 'Comb');
Insert into EMPWAGE values ('MaryC', '003', 'Holiday',  'Mary', 'Comb');
Insert into EMPWAGE values ('MaryC', '397', 'Comp',     'Mary', 'Comb');
Insert into EMPWAGE values ('RickK', '001', 'RegHours', 'Rick', 'Kite');
Insert into EMPWAGE values ('RickK', '008', 'Sick',     'Rick', 'Kite');
Insert into EMPWAGE values ('TamiB', '001', 'RegHours', 'Tami', 'Ball');
Insert into EMPWAGE values ('TamiB', '003', 'Holiday',  'Tami', 'Ball');
Insert into EMPWAGE values ('TamiB', '008', 'Sick',     'Tami', 'Ball');
Insert into EMPWAGE values ('TamiB', '010', 'PCH',      'Tami', 'Ball');