首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql select,如何查找在同一列中具有给定值的应用程序名称

Mysql select,如何查找在同一列中具有给定值的应用程序名称
EN

Stack Overflow用户
提问于 2012-12-18 13:43:46
回答 2查看 103关注 0票数 0

我有一个表,其中包含应用程序名称和授予该应用程序的权限。我需要找出需要这两者的应用程序是什么

代码语言:javascript
复制
name   permissions
app1    perm1
app1    perm5
app1    perm6
app2    perm1
app2    perm8
app3    perm1
app3    perm6
app3    perm2
app3    perm4

如何找到同时包含"perm1和perm6“....的应用程序名称?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-18 14:24:57

这里有一种方法。

代码语言:javascript
复制
SELECT t.name
  FROM mytable t
 GROUP BY t.name
HAVING MAX(IFNULL(t.permissions,'')='perm1')
     + MAX(IFNULL(t.permissions,'')='perm6') = 2
 ORDER BY t.name

我们使用GROUP BY和聚合函数,如果我们找到一个具有“perm1”的行,则t.permisson= 'perm1‘返回1,否则返回0。(我们通过将t.permissions包装在IFNULL函数中来处理NULL的情况。)

如果同时找到'perm1‘和'perm6',则HAVING谓词的值将为TRUE,并返回该行。

另一种方法是使用EXISTS谓词来运行相关子查询:

代码语言:javascript
复制
SELECT t.name
  FROM mytable t
 WHERE t.permissions = 'perm1'
   AND EXISTS 
       ( SELECT 1 
           FROM mytable s
          WHERE s.name = t.name
            AND s.permissions = 'perm6'
       )
 GROUP BY t.name
 ORDER BY t.name

或等效项,使用IN谓词:

代码语言:javascript
复制
 SELECT t.name
   FROM mytable t
  WHERE t.permissions = 'perm1'
    AND t.name IN 
        ( SELECT s.name
            FROM mytable s
           WHERE s.permissions = 'perm6'
             AND s.name IS NOT NULL
           GROUP BY s.name
        )
  GROUP BY t.name
  ORDER BY t.name

获得它的第四种方法是:

代码语言:javascript
复制
 SELECT t.name
   FROM mytable t
   JOIN mytable s
     ON t.name = s.name
    AND t.permissions = 'perm1'
    AND s.permissions = 'perm6'
  GROUP BY t.name
  ORDER BY t.name
票数 1
EN

Stack Overflow用户

发布于 2012-12-18 13:45:27

代码语言:javascript
复制
SELECT name
FROM tableName
WHERE   permissions IN ('perm1','perm6')
GROUP BY name
HAVING COUNT(*) = 2

  • SQLFiddle Demo

代码语言:javascript
复制
SELECT name
FROM tableName
WHERE   permissions IN ('perm1','perm6')
GROUP BY name
HAVING COUNT(DISTINCT permissions) = 2
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13926993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档