比较具有不同列数的2个视图

时间:2017-05-04 12:49:05

标签: mysql sql join

我有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

感谢。

2 个答案:

答案 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;

这不是查询性能的最佳示例,但它应返回预期结果。