在兩個不同的數據庫(源到目標)驗證相同的表時,例如我有兩個表,學生在源和student1的目標。 學生和學生1有列sname,m,p,c(sname作爲學生姓名,m,p,c作爲主題marks.i需要找出'& *'的列名和值。如何找到垃圾值或不匹配的值列在Oracle
學生 和 student1
輸出應該像
在兩個不同的數據庫(源到目標)驗證相同的表時,例如我有兩個表,學生在源和student1的目標。 學生和學生1有列sname,m,p,c(sname作爲學生姓名,m,p,c作爲主題marks.i需要找出'& *'的列名和值。如何找到垃圾值或不匹配的值列在Oracle
學生 和 student1
輸出應該像
您可以嘗試使用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
但如果我有1000列具體如何,我可以知道哪裏是垃圾? –
@KalpataruMAhanta您將不得不使用'DBMS_SQL'循環查詢我建議的查詢和所有列返回的所有記錄,並檢查每列的值是否爲非數字。順便說一句,你如何定義垃圾價值?它是「不是一個數字」嗎?或者可以有其他的價值,你會認爲一個垃圾?或「垃圾」值是大於在repspective列'student'表不同的任何值(甚至是數字)? –
我們可以比較每個列源通過加入像顯示student1.column_name過濾不匹配的行之後的目標時student.column_name <> student1.column_name或任何其他方式? –
你可以在所有列上進行完全外連接,並在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 ....
的垃圾,你只是意味着任何非數字?還是你的意思是比源對於一個給定的sname在不同目標上的任何值(甚至數)? – tbone