日期:2014-05-18 浏览次数:20702 次
SELECT * FROM [a] LEFT JOIN [b] AS t ON a.id=t.id AND NOT EXISTS(SELECT 1 FROM b WHERE [id]=t.[id] AND [date]>t.[date])
------解决方案--------------------
SELECT *
FROM ta a
INNER JOIN tb b ON a.uid = b.uid
WHERE NOT EXISTS ( SELECT 1
FROM tb
WHERE uid = b.uid
AND [date] > t.[date] )
------解决方案--------------------
IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'A')
BEGIN
DROP TABLE A
END
GO
CREATE TABLE A
(
ID VARCHAR(10),
Name VARCHAR(10)
)
GO
INSERT INTO A
SELECT '3711021994','张三' UNION
SELECT '3711021989','李四'
GO
IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'B')
BEGIN
DROP TABLE B
END
GO
CREATE TABLE B
(
ID VARCHAR(10),
Sex VARCHAR(10),
Gra VARCHAR(10),
Date VARCHAR(10)
)
GO
INSERT INTO B
SELECT '3711021994', '男', '2008毕业', '2012.06.27' UNION
SELECT '3711021994', '女', '2010毕业', '2012.06.28'
GO
SELECT A.ID,
A.Name,
Sex,
Gra,
Date
FROM A LEFT OUTER JOIN (
select ID,
Sex,
Gra,
Date
from B AS t
where (select count(*) from B where ID=t.ID and Date>t.Date )<1) AS C ON A.ID = C.ID
------解决方案--------------------
--> 测试数据:[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 ALL
SELECT 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 ALL
SELECT 3711021994,'女','2010毕业','2012.06.28'
--------------开始查询--------------------------
SELECT * FROM [a]
LEFT JOIN [b] AS t
ON 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.000
3711021989 李四 NULL NULL NULL NULL
(2 行受影响)
*/