【问题标题】:SQL query fetching data and insert to dbSQL查询获取数据并插入到数据库
【发布时间】:2018-08-27 00:18:04
【问题描述】:

employeeAccount

CREATE TABLE employeeAccount
( 
    employAccID NUMBER(2),
    emplyUsername VARCHAR(20),
    emplyFirstName VARCHAR(20),
    emplyLastName VARCHAR(20),
)

INSERT INTO employeeAccount(employAccID ,emplyUsername ) VALUES (1,'TestAccount1')
INSERT INTO employeeAccount(employAccID ,emplyUsername ) VALUES (2,'TestAccount2')

JobRole:

CREATE TABLE Jobrole
( 
    jobNo NUMBER(2),
    jobName VARCHAR(20),
)

INSERT INTO Jobrole(jobNo ,jobName) VALUES (001,'Admin')
INSERT INTO Jobrole(jobNo ,jobName) VALUES (002,'CEO')

这是我的employeeJob 代码:

CREATE TABLE employeeJob
(
  empid NUMBER(2),
  empjob NUMBER(2),
  CONSTRAINT pk_employeeJob PRIMARY KEY(empid,empjob),
  CONSTRAINT fk_empassignjob1 FOREIGN KEY(empid) REFERENCES employeeAccount(employAccID),
 CONSTRAINT fk_empassignjob2 FOREIGN KEY(empjob) REFERENCES Jobrole(jobNo)
)

下面是插入查询:

INSERT INTO employeeJob(empid,empjob)
VALUES (1,'001')

知道如何让它自动从employeeAccount 表中获取emplyFirstNameemplyLastName 等所有数据并插入到employeeJob。我应该如何做到这一点以使其自动插入存在于 employeeAccount 重复到 employeeJob 表的其他数据?

【问题讨论】:

  • 您使用的是哪个DBMS? “SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加标签postgresql, oracle, db2, sql-server, ...
  • 创建一个接收所有数据的过程。如果不存在,则在过程中添加新的工作信息,如果不存在则添加新帐户,如果不存在则添加工作与人员之间的新关系。然后,您只需要使用每个帐户数据调用该过程即可!
  • 我正在使用 myORA ,抱歉没有在这篇文章中插入信息
  • 按照您的要求复制数据并不是您应该如何在 RDBMS 中操作数据。插入后,查看包含员工详细信息的工作是一个查询操作,它连接这些表以获取信息。您不想拥有数据的第二个副本。想象一下,如果您必须跟进名称的更新会发生什么。

标签: sql oracle sql-insert create-table


【解决方案1】:

是的,你可以,

INSERT INTO table2
SELECT * FROM table1
WHERE condition;

您可以从table1 自动填充table2。如果您想要所有记录,请忽略 WHERE 条件。但是,如果您只想自动填充从 table1table2 的某些记录,请在 WHERE 语句中写入 condition

【讨论】:

    【解决方案2】:

    您可以在插入时在employeejob 表上创建触发器

    Create trigger trgGetOtherDetails
    On employeejob AFTER INSERT -- the AFTER key word is Necessary
    AS
    BEGIN
    Declare @emplyFirstname   varchar(30), 
    @emplyLastname   varchar(30),
    @empId      varchar(5)
    
    select @empId = empId from inserted
    
    Select @emplyFirstname = emplyFirstname, @emplyLastname = emplyLastname from employeeAccount where employAccID = @empId
    
    Update employeejob 
    Set emplyFirstname = @emplyFirstname, 
    emplyLastname = @emplyLastname 
    Where empId = @empId
    
    END
    

    【讨论】:

    • 您好,感谢您的回复。它看起来很棒。但我收到错误“ORA-04071:缺少 BEFORE、AFTER 或 INSTEAD OF 关键字”。另一个问题是“在哪里 empId = inserted.empId”,我可以将插入的内容更改为 1 吗?因为我在做固定的 sql,而不是动态的(从表单插入)
    • @thenewsboy 您可能错过了查询中的“AFTER”关键字。我再次编辑了我的代码。这应该适合你。而“插入”是由 SQL Server 自动管理的临时表。它在 INSERT 和 UPDATE 语句期间存储受影响行的副本。因此,您可以轻松获取受影响行的任何信息。抱歉回复晚了
    猜你喜欢
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多