首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Mysql select查询,其中列有两个值

Mysql select查询,其中列有两个值
EN

Stack Overflow用户
提问于 2018-06-12 04:26:52
回答 4查看 734关注 0票数 5

我在MySQL有一张桌子。在这里,我有两个名为devicetest_Id的专栏。

+-------+---------+
|test_id|   device|
+-------+---------+
| test_1|   Win PC|
| test_1|     Xbox|
| test_2|  Windows|
| test_3|   Win PC|
+-------+---------+

我想选择test_Id,其中device既是Win PC又是Xbox。我已经做了如下工作

select test_id from table where device in ('Win PC', 'Xbox');

我得到了低于结果。

+----------+
| test_id  |
+----------+
| test_1   |
| test_3   |
| test_1   |
+----------+

但我希望结果是这样的

+----------+
| test_id  |
+----------+
| test_1   |
| test_1   |
+----------+

我该怎么做呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-06-12 04:42:04

实现该结果的最简单查询是test_id的不同列表:

SELECT t.test_id 
  FROM mytable t 
 WHERE t.device IN ('Win PC','Xbox') 
 GROUP BY t.test_id
 HAVING COUNT(DISTINCT t.device) = 2

如果我们想要返回单独的行,我们可以使用它作为内联视图,并连接到外部表。如下所示:

SELECT d.test_id 
  FROM ( SELECT t.test_id 
           FROM mytable t 
          WHERE t.device IN ('Win PC','Xbox') 
          GROUP BY t.test_id
          HAVING COUNT(DISTINCT t.device) = 2
       ) q
  JOIN mytable d 
    ON d.test_id = q.test_id
 WHERE d.device IN ('Win PC','Xbox')

另一种替代方法是使用EXISTS相关子查询

 SELECT d.test_id
   FROM mytable d
  WHERE d.device IN ('Win PC','Xbox')
    AND EXISTS ( SELECT 1
                   FROM mytable t1
                  WHERE t1.test_id = d.test_id
                    AND t1.device = 'Win PC'
               )
    AND EXISTS ( SELECT 1
                   FROM mytable t2
                  WHERE t2.test_id = d.test_id
                    AND t2.device = 'Xbox'
               )

还有其他查询模式可以实现相同的结果。

票数 5
EN

Stack Overflow用户

发布于 2018-06-12 04:30:14

select test_id 
from table 
where device = 'Win PC'
AND test_id IN (SELECT test_id 
from table 
where device = 'Xbox')
票数 2
EN

Stack Overflow用户

发布于 2018-06-12 04:31:50

如果您只想知道一台test_id是否同时具有Xbox和PC,您可以执行以下操作:

select test_id from 
   (select test_id, count(test_id) as cnt 
    from table 
    where device in ('Win PC', 'Xbox'), group by test_id) 
where cnt > 1
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50805510

复制
相关文章

相似问题

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