我正在尝试构造一个查询,该查询基于列 a(parameter_id)获取某些行,但仅获取的位置结果具有匹配的列 b (dimension_id)。
这是代表我正在使用的表格。
parameter_dimension
+-------+---------------+----------------+
| id | parameter_id | dimension_id |
+-------+---------------+----------------+
| 500 | 1 | 100 |
| 501 | 1 | 101 |
| 502 | 1 | 102 |
| 503 | 2 | 102 |
+-------+---------------+----------------+
如果我写
SELECT *
FROM parameter_dimension
WHERE parameter_id IN (1)
GROUP BY dimension_id
如愿以偿
+-------+---------------+----------------+
| id | parameter_id | dimension_id |
+-------+---------------+----------------+
| 500 | 1 | 100 |
| 501 | 1 | 101 |
| 502 | 1 | 102 |
+-------+---------------+----------------+
但是如果我写
SELECT *
FROM parameter_dimension
WHERE parameter_id IN (1,2)
GROUP BY dimension_id
然后我只希望获得具有共同dimension_id 的行。 像这样
+-------+---------------+----------------+
| id | parameter_id | dimension_id |
+-------+---------------+----------------+
| 502 | 1 | 102 |
+-------+---------------+----------------+
是否有可能实现这一点,并且只需要一个查询?
我更喜欢使用 IN(),因为 parameter_id 的数量可能会有所不同。
我进行了广泛的搜索,要么留下了我无法破译的解释,要么常常怀疑所问的问题与我的问题完全相关。
最佳答案
您可以使用具有不同值的 group_concat。您应该按 parameter_id 订购
SELECT *
FROM parameter_dimension
WHERE parameter_id IN (1,2)
GROUP BY dimension_id
having group_concat(distinct parameter_id ORDER BY parameter_id ASC)='1,2'
order by parameter_id
关于mysql - 从表中选择 col_a in() 仅在 col_b 值匹配的地方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44115262/