A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张腾达 中级黑马   /  2012-7-26 20:27  /  2328 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张腾达 于 2012-7-30 09:13 编辑

今儿我哥给了个题。

Person表,有pName列和pAddress列.pName列表示用户,pAddress列表示地区.要求查出和用户为张三地区完全相同的其他用户

然后我就啪啪敲键盘啊,
SELECT pName,pAddress FROM Person
WHERE pName<>'张三'
AND pAddress IN (SELECT pAddress FROM Person WHERE pName='张三')
结果我哥说错了

然后我想,广州还有个李四,这也得去掉
SELECT pName,pAddress FROM Person WHERE pName <>'张三'
AND pAddress IN(SELECT pAddress FROM Person WHERE pName='张三')
AND pName NOT IN (SELECT pName FROM Person WHERE pAddress NOT IN(SELECT pAddress FROM Person WHERE pName='张三'))
结果他说还是不对

我真懵了,这还哪儿不对啊,想细问问吧,他老人家还下线了。。。

无奈开帖求助,自个儿真掰扯不清这道题了,囧

评分

参与人数 1技术分 +2 收起 理由
郑文 + 2

查看全部评分

11 个回复

倒序浏览
select pname,paddress from person
where pname<>‘张三’
and paddress in(select address from persom where pname=‘张三’)
having count(address)= select count(address) from persom where pname='张三'
你试试看这个,最后看看select这要不要加括号

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
赵鹏程 发表于 2012-7-26 20:55
select pname,paddress from person
where pname‘张三’
and paddress in(select address from persom w ...

消息 156,级别 15,状态 1,第 4 行
关键字 'select' 附近有语法错误。

挂了{:2_33:}

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
张腾达 发表于 2012-7-26 20:58
消息 156,级别 15,状态 1,第 4 行
关键字 'select' 附近有语法错误。

试试加个括号啊
回复 使用道具 举报
张腾达 发表于 2012-7-26 20:58
消息 156,级别 15,状态 1,第 4 行
关键字 'select' 附近有语法错误。

试试加个括号啊
回复 使用道具 举报
本帖最后由 夏威夷海风 于 2012-7-26 21:08 编辑

业务逻辑没有弄明白。与张三相同地点的 也就是地址是 北京 南京 的所有姓名中除去张三这名字 ,应该选择查出四个姓名的那个
更多图片 小图 大图
组图打开中,请稍候......

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
张腾达 发表于 2012-7-26 20:58
消息 156,级别 15,状态 1,第 4 行
关键字 'select' 附近有语法错误。

嗯 写错了,漏洞百出 关键是是要完全相同的 address的数目也要相同吧
回复 使用道具 举报
谢谢夏威夷海风的一句“业务逻辑没有弄明白。”还有赵鹏程的一句“关键是是要完全相同的 address的数目也要相同吧”

题目没有审清!要求查出和用户为张三地区完全相同的其他用户
再改!
SELECT pName FROM Person WHERE pName <>'张三'
AND pAddress IN(SELECT pAddress FROM Person WHERE pName='张三')
AND pName NOT IN (SELECT pName FROM Person WHERE pAddress NOT IN(SELECT pAddress FROM Person WHERE pName='张三'))
GROUP BY pName HAVING COUNT(pAddress)=(SELECT COUNT(pAddress) FROM Person WHERE pName='张三')
结果是王五,他和张三一样,地址都是北京南京。。。
教训啊,以后一定要注意审题审题!!!

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
王峰 中级黑马 2012-7-29 14:14:00
9#
SELECT pName, pAddress FROM Person
WHERE pName <> '张三' AND pAdress In(SELECT pAddress FROM WHERE pName = '张三')
GROUP BY pAddress;

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
张腾达 发表于 2012-7-28 23:26
谢谢夏威夷海风的一句“业务逻辑没有弄明白。”还有赵鹏程的一句“关键是是要完全相同的 address的数目也要 ...

你这个有点复杂啊
SELECT pName FROM Person
where pAddress IN(SELECT pAddress FROM Person WHERE pName='张三')
GROUP BY pName
having pName <> '张三' and count(*)=2
回复 使用道具 举报
王志波 发表于 2012-7-31 09:48
你这个有点复杂啊
SELECT pName FROM Person
where pAddress IN(SELECT pAddress FROM Person WHERE pNam ...

and count(*)=2这句有点牵强了 呵呵 现在是看到表里的数据知道张三有2个地址 可是如果不知道呢?或者他还有其他的地址呢
回复 使用道具 举报
张腾达 发表于 2012-7-31 09:55
and count(*)=2这句有点牵强了 呵呵 现在是看到表里的数据知道张三有2个地址 可是如果不知道呢?或者他还 ...


哦,是我疏忽了,改成这样
having pName <> '张三' and count(*)=(select count(*) from Person where pName='张三')
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马