您的位置:首页 > 职场人生

一道易错的SQL面试题

2011-10-01 10:22 225 查看
题:有一张表D,有a,b两列.a列表示用户b列表示地区.示例如下图:要求查出和用户为张三地区完全相同的其他用户



题解:

1.首先我们应该查出张三的地区,然后在查出在此范围内的用户,则有一下语句

SELECT a FROM D WHERE a <>'张三'
AND b IN(SELECT b FROM D WHERE a='张三')

2.这里面包含了有地区不在张三的地区范围内的用户,所以要把这部分排除掉

SELECT a FROM D WHERE a <>'张三'
AND b IN(SELECT b FROM D WHERE a='张三')
AND a NOT IN (SELECT a FROM D WHERE b NOT IN(SELECT b FROM D WHERE a='张三'))

3.很多人写到这里就认为这道题目OK,但是可能忘记考虑了一种情况,就是用户只对应一个地区但并且在张三的地区范围内,则有

SELECT a FROM D WHERE a <>'张三'
AND b IN(SELECT b FROM D WHERE a='张三')
AND a NOT IN (SELECT a FROM D WHERE b NOT IN(SELECT b FROM D WHERE a='张三'))
GROUP BY a HAVING COUNT(b)=(SELECT COUNT(b) FROM D WHERE a='张三')

考点:子查询、分组查询、HAVING语句
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: