sql的两道面试题,请大家帮忙!

landingfeng 2010-10-19 01:25:48
1。一个表 T ,只有两个字段 a,b 要求用一条SQL实现两列值的交换。
2。一个表T,只有一个字段id,存放的是有顺序的整数,现在随机删除了其中的一行,要求用一条SQL找出被删数
...全文
124 点赞 收藏 17
写回复
17 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
landingfeng 2010-10-26
[Quote=引用 16 楼 sqlcenter 的回复:]
引用 15 楼 landingfeng 的回复:
好的,多谢大家来,给分多的就是正确的!!!

没给分的未必不正确,高考你阅卷完蛋了。
[/Quote]
大家都在帮忙,实在是很感谢啊,哈哈
回复
SQLCenter 2010-10-19
[Quote=引用 15 楼 landingfeng 的回复:]
好的,多谢大家来,给分多的就是正确的!!!
[/Quote]
没给分的未必不正确,高考你阅卷完蛋了。
回复
landingfeng 2010-10-19
好的,多谢大家来,给分多的就是正确的!!!
回复
landingfeng 2010-10-19
[Quote=引用 10 楼 coleling 的回复:]
SQL code

--第二题
declare @tb table(id int)
insert @tb
select 1 union all
select 2 union all
select 3 union all
select 4 union all
--5是断号
select 6 union all
select 7 union all
select 8 union……
[/Quote]
没看明白,数不可能就只是这些1位的啊!!!
回复
landingfeng 2010-10-19
[Quote=引用 1 楼 sql77 的回复:]
SQL code
SELECT B AS A,A AS B FROM T

DECLARE @ID INT
SET @ID=(SELECT TOP 1 ID FROM T ORDER BY NEWID())
DELETE T WHERE ID=@ID

被删除的就是@ID
[/Quote]
1楼的第一个行的通,但是第二个把记录都删除了,好像不行啊
回复
tlx20093A 2010-10-19

1 select a,b into #temp from T
delete from T
insert into T(a,b)select (b,a) from #temp
回复
DEATH64 2010-10-19
[Quote=引用 10 楼 coleling 的回复:]

SQL code

--第二题
declare @tb table(id int)
insert @tb
select 1 union all
select 2 union all
select 3 union all
select 4 union all
--5是断号
select 6 union all
select 7 union all
select 8 union all
selec……
[/Quote]


牛啊。
回复
coleling 2010-10-19

--第二题
declare @tb table(id int)
insert @tb
select 1 union all
select 2 union all
select 3 union all
select 4 union all
--5是断号
select 6 union all
select 7 union all
select 8 union all
select 9 union all
select 10

select max(a.id - 1)
from @tb a
left join @tb b on a.id = b.id + 1
where b.id is null
回复
小海贼 2010-10-19
1。一个表 T ,只有两个字段 a,b 要求用一条SQL实现两列值的交换。
UPDATE T SET A=B,B=A
2。一个表T,只有一个字段id,存放的是有顺序的整数,现在随机删除了其中的一行,要求用一条SQL找出被删数
比如有表T_Test1,字段ID
select [ID]+1 from T_Test1 where [id]+1 not in (select [id] from T_Test1) and [id]<>(select max([id]) from T_Test1)
这个查出的结果是,当被删除行如果不是第一行和最后一行时,有一条记录,如果返回记录数为0行数据,则被删除的为第一行或最后一行,除非你能确定第一行的数据,否则你无论怎么处理都不知道究竟是删除了第一行还是最后一行.
回复
kiruya0 2010-10-19
第一个问题没难度
第二个好像还蛮烦的
回复
feixianxxx 2010-10-19
2.
select coalesce(k.id+1,1) as duanhao
from tb k
where not exists(select 1 from tb where k.id+1=id) and exists(select 1 from tb where id=1);
回复
feixianxxx 2010-10-19
1.直接更新...<sql server有个同时性,不必担心过程语言的交换值问题>
回复
--小F-- 2010-10-19
1.UPDATE T SET A=B,B=A

2. 就是求断号
回复
billpu 2010-10-19
[Quote=引用楼主 landingfeng 的回复:]
1。一个表 T ,只有两个字段 a,b 要求用一条SQL实现两列值的交换。
2。一个表T,只有一个字段id,存放的是有顺序的整数,现在随机删除了其中的一行,要求用一条SQL找出被删数
[/Quote]
1 参考楼上
2 有bug存在,如果随机抽到最大的一条id或者最小的id怎么办(那被删除的可能是id最小或者最大),如果序列不是最大或者最小(中间)
SELECT id+1 FROM test a WHERE NOT EXISTS (SELECT 1 FROM test WHERE id=a.id+1) AND id<>(select max(id) FROM test)
回复
SQL77 2010-10-19
SELECT B AS A,A AS B FROM T

--如果是更新物理表

UPDATE T SET A=B,B=A
回复
SQL77 2010-10-19
SELECT B AS A,A AS B FROM T

DECLARE @ID INT
SET @ID=(SELECT TOP 1 ID FROM T ORDER BY NEWID())
DELETE T WHERE ID=@ID

被删除的就是@ID
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2010-10-19 01:25
社区公告
暂无公告