我有一张桌子MySQL。在这个我有 columna 称为device和test_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 PC和Xbox。我做了如下
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)
我怎样才能做到这一点?
实现结果的最简单查询,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)
还有其他查询模式可以达到相同的结果。
| 归档时间: |
|
| 查看次数: |
635 次 |
| 最近记录: |