Oracle SQL 查找具有不同值的列

Oracle SQL find columns with different values

我有两个 tables A 和 B,都有几百万行和大约一百列。

我想找出哪些列有不同的观察结果,而不需要列出所有列的名称。

例如,假设列 ID 是两个 table 中的主键。而那个 table A 是

ID | col1 | col2
----------------
1  | 123  | 101
2  | 456  | 111

而 table B 是

ID | col1 | col2
----------------
1  | 123  | 101
2  | 456  | 222

我的查询结果大约是 col2。如果 table 基于观察形成塔布拉 A 或 B 或其他什么,我无所谓。我希望在查询中避免列出所有列,因为它们很多。我对知道其列具有不同值的行不感兴趣,只对列感兴趣。

编辑:

考虑这些假设:

谢谢!

我从一位同事那里得到了答案,我认为值得为未来的用户发布。他在 TABLE_ATABLE_B

这两个表上使用了 PL/SQL 和循环
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;
/