2

我有这个表:

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

我想根据收件箱中的 SenderNumber 列从联系人、地区、分区或村庄获取名称或 spvname。我如何实现这一目标?结果可能是这样的

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

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

4

2 回答 2

3
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   
于 2011-04-18T15:35:43.400 回答
0

我相信这样的事情会奏效......

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
于 2011-04-18T15:39:17.940 回答