一道易错的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语句
题解:
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语句
相关文章推荐
- 开始学习SQL了,请高手回答帮一下小菜鸟,一道面试题
- 一道经典的SQL面试题
- 由一个博问学到的SQL查询方法 (一道多对多关系查询的面试题)
- 一道SQL面试题(行列互换)
- 一道 SQL 面试题
- 一道经典的SQL面试题
- 记一道巨简单,但是我没有答上来的Sql面试题
- 一道sql面试题
- 一道SQL的面试题之联想
- 一道sql面试题
- 今天没做起的一道SQL面试题
- 一道SQL面试题(行列互换)
- [置顶] 一道经典的sql面试题不同的写法
- 一道SQL面试题(行列互换)
- 一道SQL的面试题之联想
- 分组取前N记录-- 一道淘宝的考察sql语句的面试题
- 一道sql面试题(查询语句)
- 一道SQL表关联查询的面试题
- 一道SQL面试题求最大值
- 一道SQL语句面试题,关于group by