zoukankan      html  css  js  c++  java
  • 一道经典的SQL面试题

    题:有一张表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语句

  • 相关阅读:
    使用Eclipse的坑
    约定优于配置
    Tomcat服务器使用和debug
    spring框架排错
    spring框架学习感悟
    Spring的标签和验证等模块
    11. Container With Most Water
    1367. Linked List in Binary Tree
    486. Predict the Winner
    205. Isomorphic Strings
  • 原文地址:https://www.cnblogs.com/dh616854836/p/2044266.html
Copyright © 2011-2022 走看看