问个面试题目

卡卡的喵 2019-03-30 06:05:59
数据结构如下
id n1 n2
1 1 a
2 1 b
3 2 a
4 2 b
5 2 c
6 3 a
7 3 b
8 3 c
9 3 d

要查询n2类型为a或者b的n1的值,但只能返回完全满足的情况,也就是说表中n1为2对应的数据虽然他的n2有a,b,c三条数据,但这算不满足。表里只有n1为1的数据才算满足。这种sql语句怎么写啊?
...全文
257 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
每一步都算数 2019-04-02
  • 打赏
  • 举报
回复

-- 上面写漏一种情况

SELECT 
    n1
FROM
    (SELECT 
        n1, GROUP_CONCAT(n2) AS 'n2'
    FROM
        test
    GROUP BY n1) a
WHERE
    n2 = 'a' OR n2 = 'b' OR n2 = 'a,b' OR n2 = 'b,a';
每一步都算数 2019-04-02
  • 打赏
  • 举报
回复

SELECT 
    n1
FROM
    (SELECT 
        n1, GROUP_CONCAT(n2) AS 'n2'
    FROM
        test
    GROUP BY n1) a
WHERE
    n2 = 'a' OR n2 = 'b' OR n2 = 'a,b';
wangjunqi8811 2019-04-02
  • 打赏
  • 举报
回复
这个要看情况, 如果要查询的字段n2在表中存在索引,使用or,in都可以,效率上没有太大却别 select id,n1 from test2 where n2 in('a','b') and n1=1; 或者: select id,n1 from test2 where (n2 ='a' or n2='b') and n1=1; 如果数据量比较大,且不存在索引,建议使用in操作。具体差距参考了连接:http://blog.chinaunix.net/uid-20639775-id-3416737.html
刘蕘 2019-03-30
  • 打赏
  • 举报
回复
select id, n1
from test2 
where (n2 = 'a' or n2 = 'b') and n1 = 1;
括号打错了。。
刘蕘 2019-03-30
  • 打赏
  • 举报
回复
select id, n1
from test2
where n2 = ('a' or n2 = 'b') and n1 = 1;

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧