Mysql 从col_a in()表格中选择,仅当col_b值匹配时

Mysql 从col_a in()表格中选择,仅当col_b值匹配时,mysql,Mysql,我试图构造一个查询,该查询基于列a(参数id)获取某些行,但是仅获取的结果具有匹配的列b(维度id) 这是一张代表我正在使用的表。 parameter_dimension +-------+---------------+----------------+ | id | parameter_id | dimension_id | +-------+---------------+----------------+ | 500 | 1 | 100

我试图构造一个查询,该查询基于列a(参数id)获取某些行,但是获取的结果具有匹配的列b(维度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
然后,我只希望得到具有维度id的行。 像这样

只有一个查询就可以实现吗?

我更喜欢使用IN(),因为参数_id的数量可能会有所不同


我已经搜索了很广的领域,要么留下了我无法解释的解释,要么经常怀疑所问的问题与我的问题有关。

你可以使用具有不同价值的group_concat。您应该按参数\u 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

您可以使用具有不同值的group_concat。您应该按参数\u 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

@草莓,你可以检查一下,我已经在外面做了,它会的work@Strawberry现在它能工作了吗?我刚刚编辑了我的ans检查,我认为
HAVING COUNT(DISTINCT parameter_id)=2
是更为传统的方法。@我试图用您的查询替换Knowledge中的“HAVING”行……,但我无法使其工作。我用错了吗?@Vinciblevence是的。不言而喻,你用错了。除此之外,我不能说,因为我无法破解你的终端,也无法读懂你的心思@草莓,你可以检查一下,我已经在外面做了,它会的work@Strawberry现在它能工作了吗?我刚刚编辑了我的ans检查,我认为
HAVING COUNT(DISTINCT parameter_id)=2
是更为传统的方法。@我试图用您的查询替换Knowledge中的“HAVING”行……,但我无法使其工作。我用错了吗?@Vinciblevence是的。不言而喻,你用错了。除此之外,我不能说,因为我无法破解你的终端,也无法读懂你的心思!“SELECT*”和“GROUP BY”不能很好地结合在一起,所以首先考虑您实际希望返回哪些列。@草莓我明白您的意思。不过,我的最后一个问题将是具体的。不过,我很感激你指出了这一点。“选择*”和“分组方式”不能很好地结合在一起,所以首先要弄清楚你到底想要返回哪些列。@我明白你的意思。不过,我的最后一个问题将是具体的。我很感激你指出了这一点。