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
Sql 负数运算给出错误答案_Sql_Oracle - Fatal编程技术网

Sql 负数运算给出错误答案

Sql 负数运算给出错误答案,sql,oracle,Sql,Oracle,我试图得到联接表的负运算结果,这意味着我正在查找不匹配的记录 我试过: SELECT count(*) FROM mp_v1 mp left join cm_v1 sop on mp.study_name=sop.study_name and sop.site_id=sop.site_id --where mp.study_name='1101' MINUS SELECT count(*) FROM iv_mpv1 mp inner join cm sop on mp.study_name=so

我试图得到联接表的负运算结果,这意味着我正在查找不匹配的记录

我试过:

SELECT count(*) FROM mp_v1 mp
left join cm_v1 sop
on mp.study_name=sop.study_name and
sop.site_id=sop.site_id
--where mp.study_name='1101'
MINUS
SELECT count(*) FROM iv_mpv1 mp
inner join cm sop
on mp.study_name=sop.study_name and
sop.site_id=sop.site_id
--where mp.study_name='1101' 
输出:此计数为171183251


但是当我单独运行第一个查询时,我得到171183251表示左外部联接,171070345表示内部联接,因此输出需要为112906。我不确定我的问题哪里错了。任何人都可以给出你的意见。

如果你想要不匹配的记录,你不会在计数上使用
减去
。查询看起来更像:

SELECT COUNT(*)
FROM ((SELECT *
       FROM mp_v1 mp LEFT JOIN
            cm_v1 sop
            USING (study_name, site_id)
      ) MINUS
      (SELECT *
       FROM iv_mpv1 mp LEFT JOIN
            iv_cmv1 sop
            USING (study_name, site_id)
      )
     ) x;
还要注意的是,
减去
会删除重复项,因此如果在每组表中都有重复项,那么它们只算作一行


SELECT*
假设表具有相同的列和兼容的类型——考虑到问题的要点,这是有意义的。您可能需要列出您关心的特定列。

请提供示例数据和所需结果。
减号不减号,它比较行
171183251
不是由第二个查询返回的,因此它是由
减号返回的。这回答了你的问题吗?@Andrew提供的链接中的第二个答案(出于可读性目的而选择)可以满足您的要求。@Andrew这是我在您发布前一分钟看到的链接之一,无论如何,感谢它能正常工作。
x
只是子查询的别名。“x”是子查询的别名。“我出错了”是没用的。什么错误?查询看起来正常,但若那个些SELECT语句的结果在不同的列集中(因为表是不同的),那个么查询将失败。重写它们以只包含您感兴趣的列。