弱弱的问一个今天面试的SQL题,搞不定,想了很久还是没得

yhtapmys 2009-09-21 09:09:33
今天下午去面试,主考官临时出的几个SQL题给我做,前面还好,就是这个题脑子一时转不来,
恳请高手指点下,测试代码做好了。
题目要求是这样的:有两个表,暂且为fa表和fb表,字段都一样(mid,mname)。要求用sql语句进行一个查询(两表都要用撒,直接select出mid的我也干了,但是不符合要求嘛),得出所要求的查询结果。
(由于是强回忆的题,不完全是当时的题,如过程中有不妥请指正,我再回忆修正,谢谢)


--创建表
use pubs

if object_id('fa') is not null drop table fa
create table fa
(
mid int,
mname varchar(20)
)
go

if object_id('fb') is not null drop table fb
create table fb
(
mid int,
mname varchar(20)
)
go

--插入数据
insert into fa
select '1001','张三' union all
select '1002','李四' union all
select '1003','王五' union all
select '1004','刘六'

--select * from fa

insert into fb
select '1001','王五' union all
select '1003','李四' union all
select '1004','张三' union all
select '1005','刘六'

--select * from fb


---
---所求的查询语句
---

--附注:原题目中,表fb是没有mid为1002的,且表fb中mid对应的张三之类的名字和表fa的所对应的是不相同滴吧
---要求查询结果:(好像是1001,1002,1003,或者是1001,1002,1004?显示的是表fa的)
---1001 张三
---1002 李四
---1003 王五


--删除用例表
--drop table fa
--drop table fb
...全文
292 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
yhtapmys 2009-09-21
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 htl258 的回复:]
SQL codeifobject_id('fa')isnotnulldroptable facreatetable fa
(
midint,
mnamevarchar(20)
)goifobject_id('fb')isnotnulldroptable fbcreatetable fb
(
midint,
mnamevarchar(20)
)go--插入数据insertinto faselect'¡­
[/Quote]

这个中!能那么快找出咱记忆的纰漏纠正并得出所要的结果,无论人品、技术、逻辑,都真的很强。再次的谢谢!谢谢所有给予热心的人~
htl258_Tony 2009-09-21
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 yhtapmys 的回复:]
引用 28 楼 htl258 的回复:
引用 27 楼 yhtapmys 的回复:
引用 19 楼 xuejiecn 的回复:
选ID在fa中存在的??

select * from fa where imd in (select mid from fb)


结果是1001,1002,1004


select * from fa where mid in (select mid from fb)
我运行您的查询语句得出的结果是1001,1003,1004,貌似不符合
或许也有这个可能吧,但是按前面的面试题(都是不关联的啦)的难度估计,应该不会在这题放水吧?面试官他给两个表给我!定有深意,定有深意啊~

24楼的回复先看看。


非常感谢,学习中~
[/Quote]
OK了提醒结贴。
yhtapmys 2009-09-21
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 htl258 的回复:]
引用 27 楼 yhtapmys 的回复:
引用 19 楼 xuejiecn 的回复:
选ID在fa中存在的??

select * from fa where imd in (select mid from fb)


结果是1001,1002,1004


select * from fa where mid in (select mid from fb)
我运行您的查询语句得出的结果是1001,1003,1004,貌似不符合
或许也有这个可能吧,但是按前面的面试题(都是不关联的啦)的难度估计,应该不会在这题放水吧?面试官他给两个表给我!定有深意,定有深意啊~

24楼的回复先看看。
[/Quote]

非常感谢,学习中~
黄_瓜 2009-09-21
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 ws_hgo 的回复:]
以后面试的时候记得把
不会的题目抄下来
[/Quote]
也许这个题目会感到面试官,收下你
不过我遇到不少水货面试官。。
黄_瓜 2009-09-21
  • 打赏
  • 举报
回复
忘了都算了,接着准备下次面试,何必放在心上。
ws_hgo 2009-09-21
  • 打赏
  • 举报
回复
以后面试的时候记得把
不会的题目抄下来
guguda2008 2009-09-21
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 yhtapmys 的回复:]
引用 21 楼 htl258 的回复:
引用 18 楼 yhtapmys 的回复:
引用 1 楼 fredrickhu 的回复:
晕  什么意思?


我的感觉是。。。利用表fb,过滤掉表fa里的某些行,但是其中的逻辑过于奇特些。故求诸位高人出来帮忙理清下,我脑子都短路啦。

你确定题目是你所描述的?


我确定。。。。,我面试一出来就一直嘀咕这这道题了 嗯嗯,八九不离十!唯一有偏差的估计就是表fb那些名字和 查询结果(不是1001,1002,1003,就是1001,1002,1004)。
[/Quote]
是不是要1001,1003,1004
两表内联?
htl258_Tony 2009-09-21
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 yhtapmys 的回复:]
引用 21 楼 htl258 的回复:
引用 18 楼 yhtapmys 的回复:
引用 1 楼 fredrickhu 的回复:
晕  什么意思?


我的感觉是。。。利用表fb,过滤掉表fa里的某些行,但是其中的逻辑过于奇特些。故求诸位高人出来帮忙理清下,我脑子都短路啦。

你确定题目是你所描述的?


我确定。。。。,我面试一出来就一直嘀咕这这道题了 嗯嗯,八九不离十!唯一有偏差的估计就是表fb那些名字和 查询结果(不是1001,1002,1003,就是1001,1002,1004)。
[/Quote]
我回了N次你咋自言自语呢
guguda2008 2009-09-21
  • 打赏
  • 举报
回复
问题都不清楚,撤退
yhtapmys 2009-09-21
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 htl258 的回复:]
引用 18 楼 yhtapmys 的回复:
引用 1 楼 fredrickhu 的回复:
晕  什么意思?


我的感觉是。。。利用表fb,过滤掉表fa里的某些行,但是其中的逻辑过于奇特些。故求诸位高人出来帮忙理清下,我脑子都短路啦。

你确定题目是你所描述的?
[/Quote]

我确定。。。。,我面试一出来就一直嘀咕这这道题了 嗯嗯,八九不离十!唯一有偏差的估计就是表fb那些名字 查询结果(不是1001,1002,1003,就是1001,1002,1004)。
htl258_Tony 2009-09-21
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 yhtapmys 的回复:]
引用 19 楼 xuejiecn 的回复:
选ID在fa中存在的??

select * from fa where imd in (select mid from fb)


结果是1001,1002,1004


select * from fa where mid in (select mid from fb)
我运行您的查询语句得出的结果是1001,1003,1004,貌似不符合
或许也有这个可能吧,但是按前面的面试题(都是不关联的啦)的难度估计,应该不会在这题放水吧?面试官他给两个表给我!定有深意,定有深意啊~
[/Quote]
24楼的回复先看看。
yhtapmys 2009-09-21
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 xuejiecn 的回复:]
选ID在fa中存在的??

select * from fa where imd in (select mid from fb)


结果是1001,1002,1004

[/Quote]
select * from fa where mid in (select mid from fb)
我运行您的查询语句得出的结果是1001,1003,1004,貌似不符合
或许也有这个可能吧,但是按前面的面试题(都是不关联的啦)的难度估计,应该不会在这题放水吧?面试官他给两个表给我!定有深意,定有深意啊~
netcup 2009-09-21
  • 打赏
  • 举报
回复
是不是ID是从小到大,名字的第二个字也从小到大排列?
虫洞 2009-09-21
  • 打赏
  • 举报
回复
--附注:原题目中,表fb是没有mid为1002的,且表fb中mid对应的张三之类的名字和表fa的所对应的是不相同滴吧
---要求查询结果:(好像是1001,1002,1003,或者是1001,1002,1004?显示的是表fa的)

没看懂
htl258_Tony 2009-09-21
  • 打赏
  • 举报
回复
if object_id('fa') is not null drop table fa
create table fa
(
mid int,
mname varchar(20)
)
go

if object_id('fb') is not null drop table fb
create table fb
(
mid int,
mname varchar(20)
)
go

--插入数据
insert into fa
select '1001','张三' union all
select '1002','李四' union all
select '1003','王五' union all
select '1004','刘六'

--select * from fa

insert into fb
select '1001','王五' union all
select '1003','张三' union ALL --估计是这个李四跟下面的张三位置对调一下吧
select '1004','李四' union all
select '1005','刘六'


SELECT *
FROM fa a
WHERE EXISTS(
SELECT 1
FROM fb b
WHERE (SELECT COUNT(1) FROM fb WHERE mid<=b.mid)
= (SELECT COUNT(1) FROM fa WHERE mid<=a.mid)
AND a.mname<>b.mname)
/*
mid mname
----------- --------------------
1001 张三
1002 李四
1003 王五

(3 行受影响)
*/
SQL77 2009-09-21
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 yhtapmys 的回复:]
引用 4 楼 htl258 的回复:
结果是怎么来的?


是主考官写纸上的。。。要我一个语句查出来 N久后 哥只好寂寞的走了

[/Quote]
billpu 2009-09-21
  • 打赏
  • 举报
回复
帮顶
htl258_Tony 2009-09-21
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 yhtapmys 的回复:]
引用 1 楼 fredrickhu 的回复:
晕  什么意思?


我的感觉是。。。利用表fb,过滤掉表fa里的某些行,但是其中的逻辑过于奇特些。故求诸位高人出来帮忙理清下,我脑子都短路啦。
[/Quote]
你确定题目是你所描述的?
zhengduan964532 2009-09-21
  • 打赏
  • 举报
回复
强!
xuejiecn 2009-09-21
  • 打赏
  • 举报
回复
选ID在fa中存在的??

select * from fa where imd in (select mid from fb)


结果是1001,1002,1004
加载更多回复(18)

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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