首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL中三表之间的数据比较,高分.

2012-02-15 
SQL中三表之间的数据比较,高分求助............................................有三个表如下:A表idname1

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,
(
SELECT * FROM @B表 TA WHERE EXISTS (SELECT 1 FROM @B表 WHERE TA.Port=Port AND ISNULL(TA.Phone,0) <> ISNULL(Phone,0))


)TB
WHERE TA.ID=TB.A_ID
--满足你的: 如何查询得出B表中PORT相同但Phone不同的结果集
/*
DK Phone
--------------------- ----------
aaa-00-01 123
aaa-00-02 456
bbb-00-01 1454
bbb-00-02 NULL

(4 行受影响)


*/
[解决办法]
……查询得出B表中PORT相同但Phone不同的结果集……

--------------------

按照你的结果,研究了半天,其实是:
a.Name + '- ' + b.Port = c.Name_Port
但是:
b.Phone <> c.Phone

是这样吧?

表述清楚了,早解决了。

热点排行