繁体   English   中英

自联接…用于现有列中值的新综合列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM