Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 根据多个条件筛选出相同的od数据行,以仅显示异常值_Sql_Sql Server_Ssms 2012 - Fatal编程技术网

Sql 根据多个条件筛选出相同的od数据行,以仅显示异常值

Sql 根据多个条件筛选出相同的od数据行,以仅显示异常值,sql,sql-server,ssms-2012,Sql,Sql Server,Ssms 2012,我正在创建一个存储过程,希望在其中返回特定的结果集 我有两个数据集,我正试图以某种方式连接,以便它只返回异常值记录(其中没有匹配项)。我曾经考虑过使用UNION和EXCEPT,但它似乎不适合这种情况。为了减少复杂性,我目前在proc中有两个CTE(或者我可以使用#tentables) 查询结果1。在下面的结果集中,此查询将返回3个字段。Field3文本值在此处始终相同 Field1 Field2 Field3 123 BAK

我正在创建一个存储过程,希望在其中返回特定的结果集

我有两个数据集,我正试图以某种方式连接,以便它只返回异常值记录(其中没有匹配项)。我曾经考虑过使用UNION和EXCEPT,但它似乎不适合这种情况。为了减少复杂性,我目前在proc中有两个CTE(或者我可以使用#tentables)

查询结果1。在下面的结果集中,此查询将返回3个字段。Field3文本值在此处始终相同

 Field1         Field2        Field3
 123            BAK           'Missing in Query 2'
 234            HAO           'Missing in Query 2'
 345            OPP           'Missing in Query 2'
查询结果2。这里的交易相同,字段3将始终具有相同的文本值

 Field1         Field2        Field3
 123            BAK           'Missing in Query 1'
 234            HAO           'Missing in Query 1'
 678            UTO           'Missing in Query 1'
期望结果:查询2中缺少返回第一行(字段345)的原因,查询1中缺少第二行。我只查找Query1.Field1=Query2.Field1和Query1.Field2=Query2.Field2的匹配项

  Field1         Field2        Field3
  345            OPP           'Missing in Query 2'   <- from Query 1
  678            UTO           'Missing in Query 1'   <- from Query 2
Field1 Field2 Field3

345 OPP‘在查询2中丢失’我想您想要的是不在两个表中的行。一种方法是:

select qr1.*
from qr1
where not exists (select 1 from qr2 where qr2.field1 = qr1.field1 and qr2.field2 = qr1.field2)
union all
select qr2.*
from qr2
where not exists (select 1 from qr1 where qr1.field1 = qr2.field1 and qr1.field2 = qr2.field2);

我想您需要两个表中都没有的行。一种方法是:

select qr1.*
from qr1
where not exists (select 1 from qr2 where qr2.field1 = qr1.field1 and qr2.field2 = qr1.field2)
union all
select qr2.*
from qr2
where not exists (select 1 from qr1 where qr1.field1 = qr2.field1 and qr1.field2 = qr2.field2);

您可以使用
完全外部联接

select coalesce(qr1.field1, qr2.field1) as field1,
       coalesce(qr1.field2, qr2.field2) as field2,
       (case when qr1.field1 is null 
             then 'Missing in Query 1'
             else 'Missing in Query 2'  
        end) as Field3
from qr1 full outer join
     qr2
     on qr1.field1 = qr2.field1 and qr1.field2 = qr2.field2
where (qr1.field1 is null or qr2.field2 is null);

您可以使用
完全外部联接

select coalesce(qr1.field1, qr2.field1) as field1,
       coalesce(qr1.field2, qr2.field2) as field2,
       (case when qr1.field1 is null 
             then 'Missing in Query 1'
             else 'Missing in Query 2'  
        end) as Field3
from qr1 full outer join
     qr2
     on qr1.field1 = qr2.field1 and qr1.field2 = qr2.field2
where (qr1.field1 is null or qr2.field2 is null);