2014-03-31 28 views
0

我已經創建了下面兩個表之間的差異報告:使用查詢或存儲過程的兩個表中

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; 
/

我需要找到一種方式,我可以創建一個存儲過程或查詢,以顯示我的兩個表之間的差異

任何幫助將不勝感激,我一直在努力與此。

+0

你用什麼數據庫? oracle,mysql,sql server? –

+0

我會查詢你的模式。我假設DBA也是一名員工。在員工身上出現某種標誌可能有意義,或者讓員工承擔很多角色,而不是成爲具有重複字段的全新表格。 – Paddy

+0

您是否想每次使用dba員工填充dbateam,並將dba員工插入到employees表中? –

回答

0

在Oracle:

SELECT * FROM table1 
MINUS 
SELECT * FROM table2 

OR

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