我有2个不同列数的视图。其中一个视图已与另一个视图连接,这就是为什么它有其他列。
第一个视图有113条记录(视图2),而更新后的视图(视图1)有130列。我想找出View 1中额外的记录数 。
View 1 View 2
A|B|C|D|E A|B|C
1 2 3 4 5 1 2 3
1 2 3 7 8
3 2 1 4 5 3 2 1
3 2 1 7 8
预期结果:
1 2 3 7 8
3 2 1 7 8
感谢。
答案 0 :(得分:0)
您可以使用“not in”或“not exists”条件获取额外记录
select * from view1 m where not exists (
select 1 from view2 u where (m.a=u.a and m.b=u.b and m.c=u.c)
您可以根据自己的要求更改这些条件
使用左连接也将获得所需的结果
select m.* from view1 m left join view2 u
(m.a=u.a and m.b=u.b and m.c=u.c)
where u.a is null and u.b is null and u.c is null
答案 1 :(得分:0)
你应该重构你的数据库架构和数据逻辑。
但只是为了解决你的奇怪要求,你可以:
http://sqlfiddle.com/#!9/cf2c50/2
SELECT t.a, t.b, t.c, t.d, t.e
FROM (
SELECT v1.*, IF(@idx = concat(v1.a,v1.b,v1.c),1,0) `filter`,@idx := concat(v1.a,v1.b,v1.c)
FROM v1
INNER JOIN v2
ON v1.a=v2.a AND v1.b=v2.b AND v1.c=v2.c
ORDER BY v1.a,v1.b,v1.c
) t
WHERE t.`filter`=1;
这不是查询性能的最佳示例,但它应返回预期结果。