第一种,同意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 TABLEAwhere 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基础类型的集合 再进行比较
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)