Mysql 从多个表的电话号码中获取名称?

Mysql 从多个表的电话号码中获取名称?,mysql,sql,multiple-tables,phone-number,Mysql,Sql,Multiple Tables,Phone Number,我有以下表格: inbox table SenderNumber Message contact table Name Number district table id SpvName Number sub_district table id district_id SpvName Number village table id sub_district_id SpvName Number 我想从“收件箱”中的“发件人编号”列中获取联系人、地区、sub_地区或村庄的姓名或spvname

我有以下表格:

inbox table
SenderNumber Message

contact table
Name Number

district table
id SpvName Number

sub_district table
id district_id SpvName Number

village table
id sub_district_id SpvName Number
我想从“收件箱”中的“发件人编号”列中获取联系人、地区、sub_地区或村庄的姓名或spvname。我如何做到这一点?结果可能是这样

SenderNumber | Name | Type         | Message  
-------------+------+--------------+------------
123          | john | contact      | bla bla  
234          | mary | district spv | bla bla bla  

提前谢谢,对不起,我的英语不好

我相信这样做会奏效

SELECT i.SenderNumber,
       COALESCE(c.Name, d.SpvName, sd.SpvName, v.SpvName) as Name,
       CASE WHEN c.Name IS NOT NULL THEN 'contact'
            WHEN d.SpvName IS NOT NULL THEN 'district'
            WHEN sd.SpvName IS NOT NULL THEN 'sub_district'
            WHEN v.SpvName IS NOT NULL THEN 'village'  
            ELSE ''
       END AS Type,
       i.Message
    FROM inbox i
        LEFT JOIN contact c
            ON i.SenderNumber = c.Number
        LEFT JOIN district d
            ON i.SenderNumber = d.Number
        LEFT JOIN sub_district sd
            ON i.SenderNumber = sd.Number   
        LEFT JOIN village v
            ON i.SenderNumber = v.Number   
SELECT i.SenderNumber, a.Name, a.Type, i.Message FROM
inbox i
INNER JOIN
(SELECT SpvName as Name, 'contact' as Type, Number FROM contact
 UNION
 SELECT SpvName as Name, 'sub district' as Type, Number FROM sub_district
 UNION
 SELECT SpvName as Name, 'district' as Type, Number FROM district
 UNION
 SELECT SpvName as Name, 'village' as Type, Number FROM village
 ) a
ON i.SenderNumber = a.Number

谢谢,这是我需要的,但是,我想知道我们怎样才能使它更快?查询大约需要0.780秒。我有每个表的记录数:收件箱:227联系人:36区:11子区:154村:1767谢谢你的回答,这比以前的回答快,因为它只显示加入表中列出的电话号码的所有消息。我需要显示所有消息。您只需将内部连接更改为左连接即可显示所有消息。a、 名称和a。未包含在链接表中的电话号码类型将为空