日期:2014-05-18  浏览次数:20615 次

SQL中三表之间的数据比较,高分求助............................................
有三个表如下:
A表
id       name
1           aaa
2           bbb
3           ccc
B表
id       A_ID       Port       Phone
1             1         00-01       123
2             1         00-02       456
3             1         00-03      
4             1         00-04       157        
5             2         00-01       1454
6             2         00-02              
C表
ID       Name_Port       Phone                 address          
1         aaa-00-01       123                         asdf
2         aaa-00-02                                     ererer
3         aaa-00-03       1212145454             asdfasdf
4         bbb-00-01       789                       sadfasdfasdf
如何查询得出B表中PORT相同但Phone不同的结果集,并显示出A.Name+B.Port、   B.Phone   、C.Phone、C.address
结果即:
      DK                   B.Phone           C.Phone       C.address
aaa-00-02             456                                       ererer
aaa-00-03                                   1212145454     asdfasdf
aaa-00-04             157
bbb-00-01             1454               789               sadfasdfasdf

(其中aaa-00-01是Phone记录相等,bbb-00-02是C表中没有记录,而B表中Phone记录为空,所以只有这两个是相等的记录。)
高分求助.................

------解决方案--------------------
--A表和B表相连接的结果如下:
DECLARE @A表 TABLE(ID INT ,NAME VARCHAR(10))
INSERT INTO @A表
SELECT 1, 'aaa '
UNION ALL
SELECT 2, 'bbb '
UNION ALL
SELECT 3, 'ccc '


DECLARE @B表 TABLE(id INT, A_ID INT, Port VARCHAR(10), Phone VARCHAR(10))
INSERT INTO @B表
SELECT 1,1, '00-01 ',123
UNION ALL
SELECT 2,1, '00-02 ',456
UNION ALL
SELECT 3,1, '00-03 ',NULL
UNION ALL
SELECT 4,1, '00-04 ',157
UNION ALL
SELECT 5,2, '00-01 ',1454
UNION ALL
SELECT 6,2, '00-02 ',NULL

SELECT DK=TA.Name+ '- '++TB.Port ,
TB.Phone
FROM @A表 TA