Mysql 选择查询,其中列有两个值

Use*_*345 5 mysql

我有一张桌子MySQL。在这个我有 columna 称为devicetest_Id

+-------+---------+
|test_id|   device|
+-------+---------+
| test_1|   Win PC|
| test_1|     Xbox|
| test_2|  Windows|
| test_3|   Win PC|
+-------+---------+
Run Code Online (Sandbox Code Playgroud)

我想选择test_Id其中device的两个Win PCXbox。我做了如下

select test_id from table where device in ('Win PC', 'Xbox');
Run Code Online (Sandbox Code Playgroud)

我得到低于结果。

+----------+
| test_id  |
+----------+
| test_1   |
| test_3   |
| test_1   |
+----------+
Run Code Online (Sandbox Code Playgroud)

但我希望结果像

+----------+
| test_id  |
+----------+
| test_1   |
| test_1   |
+----------+
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

spe*_*593 5

实现结果的最简单查询,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
Run Code Online (Sandbox Code Playgroud)

如果我们想返回单个行,我们可以将其用作内联视图,并对外部表执行 JOIN。像这样的东西:

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')
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用 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'
               )
Run Code Online (Sandbox Code Playgroud)

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