黑马程序员技术交流社区

标题: 一个sql查询题,纠结啊纠结(已解决) [打印本页]

作者: 张腾达    时间: 2012-7-26 20:27
标题: 一个sql查询题,纠结啊纠结(已解决)
本帖最后由 张腾达 于 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='张三'))
结果他说还是不对

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

无奈开帖求助,自个儿真掰扯不清这道题了,囧
作者: 赵鹏程    时间: 2012-7-26 20:55
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这要不要加括号

作者: 张腾达    时间: 2012-7-26 20:58
赵鹏程 发表于 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:}
作者: 赵鹏程    时间: 2012-7-26 20:58
张腾达 发表于 2012-7-26 20:58
消息 156,级别 15,状态 1,第 4 行
关键字 'select' 附近有语法错误。

试试加个括号啊

作者: 赵鹏程    时间: 2012-7-26 20:59
张腾达 发表于 2012-7-26 20:58
消息 156,级别 15,状态 1,第 4 行
关键字 'select' 附近有语法错误。

试试加个括号啊

作者: 夏威夷海风    时间: 2012-7-26 21:00
本帖最后由 夏威夷海风 于 2012-7-26 21:08 编辑

业务逻辑没有弄明白。与张三相同地点的 也就是地址是 北京 南京 的所有姓名中除去张三这名字 ,应该选择查出四个姓名的那个

QQ截图20110726204826.jpg (22.54 KB, 下载次数: 37)

QQ截图20110726204826.jpg

QQ截图20110726205719.jpg (15.56 KB, 下载次数: 37)

QQ截图20110726205719.jpg

aaaa.jpg (27.67 KB, 下载次数: 35)

aaaa.jpg

数据表.jpg (23.94 KB, 下载次数: 34)

表结构

表结构

作者: 赵鹏程    时间: 2012-7-26 21:21
张腾达 发表于 2012-7-26 20:58
消息 156,级别 15,状态 1,第 4 行
关键字 'select' 附近有语法错误。

嗯 写错了,漏洞百出 关键是是要完全相同的 address的数目也要相同吧

作者: 张腾达    时间: 2012-7-28 23:26
谢谢夏威夷海风的一句“业务逻辑没有弄明白。”还有赵鹏程的一句“关键是是要完全相同的 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='张三')
结果是王五,他和张三一样,地址都是北京南京。。。
教训啊,以后一定要注意审题审题!!!
作者: 王峰    时间: 2012-7-29 14:14
SELECT pName, pAddress FROM Person
WHERE pName <> '张三' AND pAdress In(SELECT pAddress FROM WHERE pName = '张三')
GROUP BY pAddress;
作者: 王志波    时间: 2012-7-31 09:48
张腾达 发表于 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:55
王志波 发表于 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 11:04
张腾达 发表于 2012-7-31 09:55
and count(*)=2这句有点牵强了 呵呵 现在是看到表里的数据知道张三有2个地址 可是如果不知道呢?或者他还 ...


哦,是我疏忽了,改成这样
having pName <> '张三' and count(*)=(select count(*) from Person where pName='张三')




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2