Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql中的局部对称差分_Sql_Oracle_Symmetric Difference - Fatal编程技术网

sql中的局部对称差分

sql中的局部对称差分,sql,oracle,symmetric-difference,Sql,Oracle,Symmetric Difference,我有一个与类似的问题,只是我需要从比较中排除某些字段,但仍将其包括在结果集中。 我把这个问题写成局部对称差分 例如,表A和B有X、Y、Z列,我只想比较Y、Z的差异,但我仍然希望结果集包括X。用于完全联接的旧式SQL-A与B连接,不包括B中的行以及A(中间): ANSI样式: select coalesce(a.x, b.x) as x, coalesce(a.y, b.y) as y, a.z from a full outer join b

我有一个与类似的问题,只是我需要从比较中排除某些字段,但仍将其包括在结果集中。
我把这个问题写成局部对称差分


例如,表A和B有X、Y、Z列,我只想比较Y、Z的差异,但我仍然希望结果集包括X。

用于完全联接的旧式SQL-A与B连接,不包括B中的行以及A(中间):

ANSI样式:

select coalesce(a.x, b.x) as x,
       coalesce(a.y, b.y) as y,
       a.z
  from a 
       full outer join b
         on a.x = b.x
        and a.y = b.y
联合会的存在是为了安全;我从来没有理由在现实世界中写一个完整的外部连接

如果您真正想知道两个表是否相同,请按以下方法进行:

SELECT COUNT(*) 
  FROM (SELECT list_of_columns
          FROM one_of_the_tables
         MINUS
        SELECT list_of_columns
          FROM the_other_table
        UNION ALL
        SELECT list_of_columns
          FROM the_other_table
         MINUS
        SELECT list_of_columns
          FROM one_of_the_tables)

如果它返回一个非零的结果,那么就存在差异。它不会告诉您它在哪个表中,但这只是一个开始。

用于完全联接的旧式SQL—a与B连接,不包括B中的行以及a(中间)中的行:

ANSI样式:

select coalesce(a.x, b.x) as x,
       coalesce(a.y, b.y) as y,
       a.z
  from a 
       full outer join b
         on a.x = b.x
        and a.y = b.y
联合会的存在是为了安全;我从来没有理由在现实世界中写一个完整的外部连接

如果您真正想知道两个表是否相同,请按以下方法进行:

SELECT COUNT(*) 
  FROM (SELECT list_of_columns
          FROM one_of_the_tables
         MINUS
        SELECT list_of_columns
          FROM the_other_table
        UNION ALL
        SELECT list_of_columns
          FROM the_other_table
         MINUS
        SELECT list_of_columns
          FROM one_of_the_tables)

如果它返回一个非零的结果,那么就存在差异。它不会告诉你它在哪个表中,但这只是一个开始。

听起来这基本上就是你想要的。匹配Y列和Z列上两个表之间的行,查找不匹配的行,并输出X、Y和Z列的值

SELECT a.x, a.y, a.z, b.x, b.y, b.z
  FROM a FULL OUTER JOIN b ON a.y = b.y AND a.z = b.z
  WHERE a.y IS NULL OR b.y IS NULL

听起来这基本上就是你想要的。匹配Y列和Z列上两个表之间的行,查找不匹配的行,并输出X、Y和Z列的值

SELECT a.x, a.y, a.z, b.x, b.y, b.z
  FROM a FULL OUTER JOIN b ON a.y = b.y AND a.z = b.z
  WHERE a.y IS NULL OR b.y IS NULL

示例数据和预期输出请示例数据和预期输出请如果
一个\u表
包含另一个\u表中的数据子集,则最后一次查询也将返回0。您需要在两个方向上进行减号,以测试数据集是否完全相同。如果
一个\u表
包含另一个\u表中的数据子集,则最后一个查询也将返回0。您需要在两个方向上进行减号,以测试数据集是否完全相同。