2013-10-30 68 views
1

在兩個不同的數據庫(源到目標)驗證相同的表時,例如我有兩個表,學生在源和student1的目標。 學生和學生1有列sname,m,p,c(sname作爲學生姓名,m,p,c作爲主題marks.i需要找出'& *'的列名和值。如何找到垃圾值或不匹配的值列在Oracle

學生enter image description here 和 student1 enter image description here

輸出應該像enter image description here

+0

的垃圾,你只是意味着任何非數字?還是你的意思是比源對於一個給定的sname在不同目標上的任何值(甚至數)? – tbone

回答

0

您可以嘗試使用NATURAL JOIN加入兩個表列的名稱相同,具有天然的查詢加盟將讓你所有的記錄匹配,然後,可以減去這些記錄從查詢結果從student1表返回的記錄,你就會有通過自然連接被排斥在外的記錄(意思是,有垃圾值的記錄):

CREATE TABLE student (
    sname VARCHAR2(20), 
    m VARCHAR2(20), 
    p VARCHAR2(20), 
    c VARCHAR2(20) 
); 

CREATE TABLE student1 (
    sname VARCHAR2(20), 
    m VARCHAR2(20), 
    p VARCHAR2(20), 
    c VARCHAR2(20) 
); 

INSERT INTO student VALUES ('rama', '50', '60', '70'); 
INSERT INTO student VALUES ('laxman', '70', '50', '60'); 
INSERT INTO student VALUES ('sita', '60', '70', '50'); 
INSERT INTO student VALUES ('kalpu', '40', '80', '70'); 
INSERT INTO student VALUES ('some student', '*', '80', '70'); 

INSERT INTO student1 VALUES ('rama', '50', '60', '70'); 
INSERT INTO student1 VALUES ('laxman', '70', '&*', '60'); 
INSERT INTO student1 VALUES ('sita', '60', '70', '50'); 
INSERT INTO student1 VALUES ('kalpu', '40', '80', '70'); 
INSERT INTO student1 VALUES ('some student', '40', '80', '70'); 

COMMIT; 

SELECT 
    * 
    FROM student1 

MINUS 

SELECT 
    * 
    FROM student s 
    NATURAL JOIN student1 s1 
; 

輸出:

SNAME    M     P     C     
-------------------- -------------------- -------------------- -------------------- 
laxman    70     &*     60    
+0

但如果我有1000列具體如何,我可以知道哪裏是垃圾? –

+0

@KalpataruMAhanta您將不得不使用'DBMS_SQL'循環查詢我建議的查詢和所有列返回的所有記錄,並檢查每列的值是否爲非數字。順便說一句,你如何定義垃圾價值?它是「不是一個數字」嗎?或者可以有其他的價值,你會認爲一個垃圾?或「垃圾」值是大於在repspective列'student'表不同的任何值(甚至是數字)? –

+0

我們可以比較每個列源通過加入像顯示student1.column_name過濾不匹配的行之後的目標時student.column_name <> student1.column_name或任何其他方式? –

0

你可以在所有列上進行完全外連接,並在where子句中檢查具有空值的列。

例如:

SELECT * FROM甲 FULL OUTER上A.col1 = B.col1 JOIN B和A.col2 = B.col2 ... 凡A.col1爲空或B. COL1是NULL或A.col2 IS NULL或B.col2爲null ....