[英]Self-Join … new synthetic columns for values in existing column
我以前做过一次,但是不记得怎么做...我已经足够挣扎着,现在正在寻求帮助。
我有一个包含两列的表:Uuid和ProcessId ProcessId列当前具有两个值:ValueA和ValueB
我想做一个自我联接(完全外部联接?),以便与下表:
1234 ValueA 1234 ValueB 2345 ValueB 3456 ValueA
我将得到如下结果:
Uuid ValueA ValueB 1234 OK OK 2345 Missing OK 3456 OK Missing
尝试这个:
SELECT Uuid,
CASE WHEN U.ValueA>0 THEN 'OK' ELSE 'Missing' END AS ValueA,
CASE WHEN U.ValueB>0 THEN 'OK' ELSE 'Missing' END AS ValueB
FROM
(SELECT T.Uuid,
(SELECT COUNT(*) FROM MyTable AS M WHERE T.Uuid=M.UserID AND ValueField='ValueA') AS ValueA,
(SELECT COUNT(*) FROM MyTable AS M WHERE T.Uuid=M.UserID AND ValueField='ValueB') AS ValueB
FROM (SELECT DISTINCT Uuid FROM MyTable) AS T
GROUP BY Uuid) AS U
ORDER BY Uuid
根据索引,表大小和优化器的不同,使用一对自联接可能最快:
select TableU.Uuid,
if(count(TableA.ProcessId) > 0, 'OK', 'Missing') as ValueA,
if(count(TableB.ProcessId) > 0, 'OK', 'Missing') as ValueB
from Table11301861 as TableU
left join Table11301861 as TableA on TableA.ProcessId = 'ValueA' and TableA.Uuid = TableU.Uuid
left join Table11301861 as TableB on TableB.ProcessId = 'ValueB' and TableB.Uuid = TableU.Uuid
group by TableU.Uuid
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.