sql 查询取差集,需要根据两个字段来确定行

sql 查询取差集,需要根据两个字段来确定行,第1张

你给的例子太特殊了,可以看成是不同的数字的差,也可以看成是求和后的差。

第一种,同意1楼,用EXCEPT最简洁了

SELECT a, b from a except select a, b from b

第二种按照和来算

SELECT t1.a, SUM(t1.b) - SUM(t2.b)

FROM a t1

LEFT JOIN b t2

ON t1.a = t2. a

GROUP BY t1.a

最好可以对sum(t2.b)做一个null判断,oracle里面就是

SELECT t1.a, NVL(SUM(t1.b), 0) - NVL(SUM(t2.b), 0)

FROM a t1

LEFT JOIN b t2

ON t1.a = t2. a

GROUP BY t1.a

其他sql方言要对null判断作适当转换,类似

SELECT t1.a,

CASE WHEN SUM(t1.b) IS NULL THEN 0 ELSE SUM(t1.b) END

- CASE WHEN SUM(t2.b) IS NULL THEN 0 ELSE SUM(t2.b) END -

FROM a t1

LEFT JOIN b t2

ON t1.a = t2. a

GROUP BY t1.a

select URL from TABLEA 

 where   url not in (select URL from TABLEB where APP_NAME=TABLEA.APP_NAME)

差集对应数据库 *** 作应该是select from a where a not in (select from b)

对于内存数据(比如dataTable 或是数组)比较

linq的办法大致 a.Where(rowA=>!b.Any(rowB=>rowB==rowA))

即可获得a-b的结果集

使用Except的linq扩展 还是自己写比较器的好

或者 你可以先把dataRow先select映射到某一列 成为.net基础类型的集合 再进行比较


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6758258.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存