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

数据库两个表联合查询,求高手解答.该怎么处理

2012-07-23 
数据库两个表联合查询,求高手解答.急急急A表:3711021994 张三 ………………3711021989 李四 ………………B表:371102199

数据库两个表联合查询,求高手解答.急急急
A表:

3711021994 张三 ………………
3711021989 李四 ………………

B表:

3711021994 男 2008毕业 2012.06.27
3711021994 女 2010毕业 2012.06.28

联合查询
3711021994 张三 女 2010毕业
3711021989 李四 NULL NULL

不要这种
3711021994 张三 男 2008毕业
3711021994 张三 女 2010毕业
3711021989 李四 NULL NULL

查询出张三的A表记录和最后一次B表的记录,没有则为空

[解决办法]

SQL code
SELECT * FROM [a] LEFT JOIN [b]  AS tON a.id=t.id AND NOT EXISTS(SELECT 1 FROM b WHERE [id]=t.[id] AND [date]>t.[date])
[解决办法]
SQL code
SELECT  *FROM    ta a        INNER JOIN tb b ON a.uid = b.uidWHERE   NOT EXISTS ( SELECT 1                     FROM   tb                     WHERE  uid = b.uid                            AND [date] > t.[date] )
[解决办法]
SQL code
IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'A')BEGIN    DROP TABLE AENDGOCREATE TABLE A(    ID VARCHAR(10),    Name VARCHAR(10))GOINSERT INTO ASELECT '3711021994','张三' UNIONSELECT '3711021989','李四'GOIF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'B')BEGIN    DROP TABLE BENDGOCREATE TABLE B(    ID VARCHAR(10),    Sex VARCHAR(10),    Gra VARCHAR(10),    Date VARCHAR(10))GOINSERT INTO BSELECT '3711021994', '男', '2008毕业', '2012.06.27' UNIONSELECT '3711021994', '女', '2010毕业', '2012.06.28'GOSELECT A.ID,A.Name,       Sex,       Gra,       DateFROM A LEFT OUTER JOIN (select ID,       Sex,       Gra,       Datefrom B AS twhere (select count(*) from B where ID=t.ID and Date>t.Date )<1) AS C ON A.ID = C.ID
[解决办法]
SQL code
--> 测试数据:[A]IF OBJECT_ID('[A]') IS NOT NULL DROP TABLE [A]GO CREATE TABLE [A]([id] BIGINT,[name] VARCHAR(4))INSERT [A]SELECT 3711021994,'张三' UNION ALLSELECT 3711021989,'李四'--> 测试数据:[B]IF OBJECT_ID('[B]') IS NOT NULL DROP TABLE [B]GO CREATE TABLE [B]([id] BIGINT,[sex] VARCHAR(2),[graduate] VARCHAR(8),[date] DATETIME)INSERT [B]SELECT 3711021994,'男','2008毕业','2012.06.27' UNION ALLSELECT 3711021994,'女','2010毕业','2012.06.28'--------------开始查询--------------------------SELECT * FROM [a] LEFT JOIN [b]  AS tON a.id=t.id AND NOT EXISTS(SELECT 1 FROM b WHERE [id]=t.[id] AND [date]>t.[date])----------------结果----------------------------/* id                   name id                   sex  graduate date-------------------- ---- -------------------- ---- -------- -----------------------3711021994           张三   3711021994           女    2010毕业   2012-06-28 00:00:00.0003711021989           李四   NULL                 NULL NULL     NULL(2 行受影响)*/ 

热点排行