【问题标题】:Using a Query or Stored Procedure to Report on the differences between two tables使用查询或存储过程报告两个表之间的差异
【发布时间】:2014-03-31 14:36:05
【问题描述】:

我创建了以下两个表:

Table1:

CREATE TABLE employees
(
PersonID NUMBER(10) NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
JobRole varchar(255) NOT NULL,
Location varchar(255) NOT NULL,
CONSTRAINT pk_employee PRIMARY KEY (personid) USING INDEX
);

Table 2:

CREATE TABLE DBAteam
(
PersonID NUMBER(10) NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
JobRole varchar(255) NOT NULL,
Location varchar(255) NOT NULL,
CONSTRAINT pk_dbateam PRIMARY KEY (personid) USING INDEX
);

以下是我用来填充这两个表的触发器和存储过程:

触发器:

CREATE OR REPLACE TRIGGER trg_trigger_test AFTER INSERT ON employees FOR EACH ROW 
BEGIN
p_procedure_test(:NEW.personid, :NEW.lastname, :NEW.firstname, :NEW.jobrole,           :NEW.location);
END trg_trigger_test;
/

存储过程:

  CREATE OR REPLACE PROCEDURE p_procedure_test 
    (
    i_personid  IN employees.personid%TYPE,
    i_lastname  IN employees.lastname%TYPE,
    i_firstname IN employees.firstname%TYPE,
    i_jobrole   IN employees.jobrole%TYPE,
    i_location  IN employees.location%TYPE
    ) AS
    --
  BEGIN
    --
    INSERT INTO dbateam 
    (
    personid,
    lastname,
    firstname,
    jobrole,
    location
    )
  VALUES 
    (
    i_personid,
    i_lastname,
    i_firstname,
    i_jobrole,
    i_location);
  --
END p_procedure_test;
/

我需要找到一种方法来创建存储过程或查询以显示两个表之间的差异

任何帮助将不胜感激,我一直在努力解决这个问题。

【问题讨论】:

  • 你使用什么数据库? oracle,mysql,sql server ?
  • 我会查询您的架构。我假设 DBA 也是雇员。在员工身上挂上某种标志可能是有意义的,或者让员工担任多个角色,而不是成为一个包含重复字段的全新表。
  • 你想每次都用 dba 员工填充 dbateam 并且 dba 员工被插入到员工表中吗?
  • 我想为所有员工创建一个表。然后为所有不同类型的员工创建单独的表。
  • 在纸面上这似乎完全有道理,但我现在意识到我的想法可能有缺陷。

标签: sql database oracle stored-procedures


【解决方案1】:

在甲骨文中:

SELECT * FROM table1
MINUS
SELECT * FROM table2

SELECT *
  FROM table1 t1
 WHERE NOT EXISTS( SELECT 1
                     FROM table2 t2
                    WHERE t1.some_key = t2.some_key )

在 Mysql 中:

SELECT * FROM table1 
WHERE ID NOT IN (SELECT ID FROM table2 )

UNION

SELECT * FROM table2 
WHERE ID NOT IN (SELECT ID FROM table1 )

在 SQL SERVER 中

select * from table1 
except
select * from table2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 2011-01-05
    • 2016-12-03
    • 2015-03-19
    • 2010-12-30
    相关资源
    最近更新 更多