我有这张桌子
+-------------+
| id | cars |
+------|------+
| 45 | 9 |
+------|------+
| 20 | 2 |
+------|------+
| 25 | 5 |
+------|------+
| 25 | 2 |
+------|------+
| 20 | 5 |
+------|------+
| 42 | 3 |
+------|------+
| 19 | 5 |
+------|------+
我需要得到像这样的表
+-------------+
| id | cars |
+------|------+
| 20 | 2 |
+------|------+
| 25 | 5 |
+------|------+
| 25 | 2 |
+------|------+
| 20 | 5 |
+------|------+
因此,我只需要在列表中选择那些具有所有相等汽车值的行(5,2)。 哦,我不能使用id列,只能使用汽车
我试过了这个查询
SELECT * FROM myTable where cars in(5, 2)
但它重新调整了这个表
+-------------+
| id | cars |
+------|------+
| 20 | 2 |
+------|------+
| 25 | 5 |
+------|------+
| 25 | 2 |
+------|------+
| 20 | 5 |
+------|------+
| 19 | 5 |
+------|------+
如何选择那些列表中包含所有valaues的行(5,2)? 对不起,如果我的问题不是很干净
答案 0 :(得分:0)
in
是or
- 类型匹配。将找到具有in
列表中的一个值的任何记录。要将其更改为and
类型,情况要复杂得多:
SELECT *
FROM yourtable AS main
LEFT JOIN (
SELECT id, cars, COUNT(*) AS cnt
FROM yourtable
WHERE cars IN (5,2)
GROUP BY cars
HAVING cnt = 2
) AS child ON (main.id = child.id) AND (main.cars = child.cars)
子选择确定哪个cars
同时包含5
和2
,然后父查询使用该查询来检索特定id
的关联cars
答案 1 :(得分:0)
可能不是效率最高的,如果您的列表中有更多汽车,它会变得非常繁琐,但这会为您提供样品所需的结果:
select id, cars
from myTable
where id in (
select id
from myTable
where cars = 5
)
and id in (
select id
from myTable
where cars = 2
)