2016-10-27 72 views
0

我有一个表Trackings(visitor_id, field, value, type)它记录动态/用户自定义字段合并多个相关行

我要合并visitor Avisitor B,使得对于每一个在A跟踪,将其覆盖在B。换句话说,覆盖所有的漏电痕迹在BA相应的(它们不需要具有所有在合并中指定的相同的字段)

实施例:

visitor_id field   value  type 
A   name   Jack  string 
A   orders   5   integer 
B   orders   2   integer 
B   age    30   integer 
B   signed_up_at 1/1/1990 date  

合并访问者A与乙应该产生

visitor_id field   value   type 
B   orders   5    integer 
B   age    30    integer 
B   signed_up_at 1/1/1990  date  
B   name   Jack 

理想的,这应该是相当高性能

任何想法?

回答

0

你可以试试这个查询看到部分结果

SELECT B.*, A.* 
FROM yourTable B 
FULL JOIN yourTable A 
    ON B.field = A.field 
AND B.visitor_id = 'B' 
AND A.visitor_id = 'A' 

SQL DEMO

SELECT 'B' as visitor_id, 
     COALESCE(A.field, B.field) as field, 
     COALESCE(A.value, B.value) as value, 
     COALESCE(A.type, B.type) as type 
FROM yourTable B 
FULL JOIN yourTable A 
    ON B.field = A.field 
AND B.visitor_id = 'B' 
AND A.visitor_id = 'A' 
WHERE B.visitor_id = 'B' 
    OR A.visitor_id = 'A' 

输出

enter image description here

+0

这是高性能的吗?另外,我正在寻找一个UPDATE查询 – Tarlen