非常具有挑战性的SQL访谈(不能使用存储过程)

前端之家收集整理的这篇文章主要介绍了非常具有挑战性的SQL访谈(不能使用存储过程)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
您有一个sql表表,其中包含两列:name和pen.两列都是文本字符串.
name  | pen
---------------    
mike  | red
mike  | red
mike  | blue
mike  | green
steve | red
steve | yellow
anton | red
anton | blue
anton | green
anton | black
alex  | black
alex  | green
alex  | yellow
alex  | red

人名作为输入参数.

请编写一个sql语句(不是存储过程),它返回具有唯一一组笔的人的名字,这些笔等于或大于/大于给定人员的笔组.

例子:

>输入:迈克
>输出:anton

迈克有(红色,蓝色,绿色).
安东有更多小配件(红色,绿色)黑色.

>输入:史蒂夫
>输出:alex

史蒂夫有(红色,黄色).
亚历克斯有(红色,黄色)绿黑色.
迈克,安东没有打印 – 他们没有黄色.

>输入:alex
>输出

解决方法

这是一种方式( Online Demo),假设输入名称为“steve”.

这可以改为“寻找没有他们不拥有的史蒂夫钢笔的所有用户

SELECT DISTINCT name
FROM   table t1
WHERE  NOT EXISTS (SELECT *
                   FROM   table t2
                   WHERE  name = 'steve'
                          AND NOT EXISTS (SELECT *
                                          FROM   table t3
                                          WHERE  t2.pen = t3.pen
                                                 AND t1.name = t3.name))  
AND t1.name <> 'steve' /*Exclude input name from results*/

See this article for other techniques

原文链接:https://www.f2er.com/mssql/78837.html

猜你在找的MsSQL相关文章