这个sql怎么写,关联2个表,内详

afdfgg 2009-05-26 10:17:40
表1 id 姓名 身份证号
1 张三 123412341234123412
2 李四 567856785678567856
表2 id 姓名 地址 电话 年份
1 张三 北京 13800013800 2008
2 张三 北京 13800011234 2009
3 李四 上海 13987654321 2007
4 李四 北京 13987650000 2008

我想查出上面人的最新一年的地址和电话,结果如下

表1 id 姓名 身份证号 地址 电话 年份
1 张三 123412341234123412 北京 13800011234 2009
2 李四 567856785678567856 北京 13987650000 2008


...全文
92 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
afdfgg 2009-05-26
  • 打赏
  • 举报
回复
liangCK 非常感谢,太厉害了!
jia_guijun 2009-05-26
  • 打赏
  • 举报
回复
declare @tb1 table(id int,姓名 varchar(10),身份证号 varchar(20))
insert @tb1 values(1,'张三','123412341234123412')
insert @tb1 values(2,'李四','567856785678567856')

declare @tb2 table(id int,姓名 varchar(10),地址 varchar(10),电话 varchar(15),年份 int)
insert @tb2 values(1 ,'张三','北京','13800013800', 2008)
insert @tb2 values(2 ,'张三','北京','13800011234', 2009)
insert @tb2 values(3 ,'李四','上海','13987654321', 2007)
insert @tb2 values(4 ,'李四','北京','13987650000', 2008)

select a.*,b.地址,b.电话,b.年份 from @tb1 a
join
(select c.姓名,c.地址,c.电话,c.年份 from @tb2 c
join (select 姓名,年份=max(年份) from @tb2 group by 姓名) d
on c.姓名=d.姓名 and c.年份=d.年份) b
on a.姓名=b.姓名
/*
id 姓名 身份证号 地址 电话 年份
----------- ---------- -------------------- ---------- --------------- -----------
1 张三 123412341234123412 北京 13800011234 2009
2 李四 567856785678567856 北京 13987650000 2008

(2 行受影响)
*/
--小F-- 2009-05-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liangCK 的回复:]
SQL codeSELECT A.*,B.地址,B.电话,B.年份
FROM tb1 AS A
JOIN tb2 AS B
ON A.姓名=B.姓名
WHERE NOT EXISTS(SELECT * FROM tb2
WHERE 姓名=B.姓名 AND 年份>B.年份);
[/Quote]
速度 太快了
liangCK 2009-05-26
  • 打赏
  • 举报
回复
-------------------------------------------
-- Author: liangCK 小梁 & angellan 兰儿
-- Date : 2009-05-26 10:21:02
-------------------------------------------

--> 生成测试数据: @tb1
DECLARE @tb1 TABLE (id INT,姓名 VARCHAR(4),身份证号 BIGINT)
INSERT INTO @tb1
SELECT 1,'张三',123412341234123412 UNION ALL
SELECT 2,'李四',567856785678567856

--> 生成测试数据: @tb2
DECLARE @tb2 TABLE (id INT,姓名 VARCHAR(4),地址 VARCHAR(4),电话 BIGINT,年份 INT)
INSERT INTO @tb2
SELECT 1,'张三','北京',13800013800,2008 UNION ALL
SELECT 2,'张三','北京',13800011234,2009 UNION ALL
SELECT 3,'李四','上海',13987654321,2007 UNION ALL
SELECT 4,'李四','北京',13987650000,2008

--SQL查询如下:

SELECT A.*,B.地址,B.电话,B.年份
FROM @tb1 AS A
JOIN @tb2 AS B
ON A.姓名=B.姓名
WHERE NOT EXISTS(SELECT * FROM @tb2
WHERE 姓名=B.姓名 AND 年份>B.年份);

/*
id 姓名 身份证号 地址 电话 年份
----------- ---- -------------------- ---- -------------------- -----------
1 张三 123412341234123412 北京 13800011234 2009
2 李四 567856785678567856 北京 13987650000 2008

(2 row(s) affected)


*/
liangCK 2009-05-26
  • 打赏
  • 举报
回复
SELECT A.*,B.地址,B.电话,B.年份
FROM tb1 AS A
JOIN tb2 AS B
ON A.姓名=B.姓名
WHERE NOT EXISTS(SELECT * FROM tb2
WHERE 姓名=B.姓名 AND 年份>B.年份);

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧