2017-07-01 78 views
0

表一个看起来是这样的:MySQL加入子查询?

uuid 
---------------- 
0681a8ff0e114680b2688c538d92f3cb 
148ba55922544c1b8ea8e7d43ffb8095 

表B看起来是这样的:

uuid         | username 
----------------------------------------------- 
0681a8ff-0e11-4680-b268-8c538d92f3cb | test123 
148ba559-2254-4c1b-8ea8-e7d43ffb8095 | poop123 
ac123b2a-6546-8979-3213-cb426aac426b | blabla 

如何选择表中的所有值与它们各自的用户名?请注意,表a的UUID没有连字符,而表b有连字符。 (两者都是VARCHAR处理虽然)

我知道如何从表中选择的UUID与破折号补充说:

SELECT CONCAT_WS('-',MID(uuid,1,8),MID(uuid,9,4),MID(uuid,13,4),MID(uuid,17,4),MID(uuid,21,1000)) 

我也知道如何根据一列来连接两个表,但我不能弄清楚如何添加破折号并在一个查询中完成所有连接。

回答

2

只需删除连字符on子句中:

select . . . 
from a join 
    b 
    on a.uuid = replace(b.uuid, '-', ''); 

然后,回去弄清楚如何解决原始数据。您的密钥应该具有与外键引用相同的类型和格式。

+0

不能相信我没想到的是.. 我解决它使用 '选择b.uuid,b.username从B加入ON b.uuid = CONCAT_WS( ' - ',MID(一.uuid,1,8),MID(a.uuid,9,4),MID(a.uuid,13,4),MID(a.uuid,17,4),MID(a.uuid,21,1000 ))' –