我有兩個表 A 和 B 都有幾百萬行和大約一百列。
我想找出哪些列有不同的觀察結果,而不需要列出所有列的名稱。
例如,假設 columnID是兩個表中的主鍵。那張桌子是
ID | col1 | col2
----------------
1 | 123 | 101
2 | 456 | 111
而表 B 是
ID | col1 | col2
----------------
1 | 123 | 101
2 | 456 | 222
我的查詢結果將是關于col2. 如果基于觀察的表格形成表格 A 或 B 或其他表格,我無所謂。我想在查詢中避免列出所有列,因為它們很多。我對知道其列具有不同值的行不感興趣,只有列。
編輯:
考慮以下假設:
首先,假設兩個表中的列具有相同的名稱。我更喜歡在沒有這種假設的情況下作業的東西,但我對它非常滿意。
其次,表格的列只是數字。同樣,這被假定為簡化。
謝謝!
uj5u.com熱心網友回復:
我從一位同事那里得到了答案,我認為值得將其發布給未來的用戶。TABLE_A他在兩個表上使用了 PL/SQL和回圈TABLE_B
SET SERVEROUTPUT ON SIZE 10000
DECLARE
v_sql_text VARCHAR2(300);
n_contador NUMBER;
n_contador_2 NUMBER;
BEGIN
FOR x IN (
SELECT
column_name
FROM
user_tab_columns
WHERE
table_name IN (
'TABLE_A'
)
) LOOP
v_sql_text := 'SELECT /* PARALLEL 32 */ count(1) FROM (SELECT DISTINCT('
|| x.column_name
|| ') FROM TABLE_A MINUS SELECT DISTINCT('
|| x.column_name
|| ') FROM TABLE_B)';
EXECUTE IMMEDIATE v_sql_text
INTO n_contador;
v_sql_text := 'SELECT /* PARALLEL 32 */ count(1) FROM (SELECT DISTINCT('
|| x.column_name
|| ') FROM TABLE_B MINUS SELECT DISTINCT('
|| x.column_name
|| ') FROM TABLE_A)';
EXECUTE IMMEDIATE v_sql_text
INTO n_contador_2;
IF n_contador != 0 OR n_contador_2 != 0 THEN
dbms_output.put_line(x.column_name || ' is different');
END IF;
END LOOP;
END;
/
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/480979.html
