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

landingfeng 2010-10-19 01:25:48
1。一个表 T ,只有两个字段 a,b 要求用一条SQL实现两列值的交换。
2。一个表T,只有一个字段id,存放的是有顺序的整数,现在随机删除了其中的一行,要求用一条SQL找出被删数
...全文
173 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
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

22,301

社区成员

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

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