如何在 mysql 中获得不同的结果?

How to get distinct result in mysql?

我想根据 v_id

找到所有 通用的文件

我有三张表

     detail

    ----------------------------
    |d_id    |v_id    |d_name
    |--------|--------|---------
    |1       |1       |detail_A
    |2       |1       |detail_B
    |3       |2       |detail_C

    file

    --------------------
    |f_id     |fname
    |---------|---------
    |1        | file_W
    |2        | file_X
    |3        | file_Y
    |4        | file_Z

    mapping

    ---------------------------------
    |m_id   | v_id    |d_id    |f_id
    |-------|---------|--------|-----
    |1      | 1       |1       |1
    |2      | 1       |1       |2
    |3      | 1       |2       |1
    |4      | 1       |2       |3
    |5      | 2       |3       |2
    |6      | 2       |3       |4

我试过的查询如下

SELECT f.f_id, f.fname
FROM mapping AS m
INNER JOIN detail AS d ON d.d_id=m.d_id
INNER JOIN file AS f ON m.f_id=f.f_id
WHERE m.v_id IN ('1','2')
GROUP BY m.f_id
HAVING COUNT(m.f_id) >=2

我想要的结果是 file_X 因为我的 objective 是根据 v_id 查找通用文件 但是使用上面的查询我得到 file_X,file_W

预期输出

-----------
|f_id |fname
------|---
|2    |file_X

你可以简单地统计v_id的唯一值。所以如果有两个 v_id 值;为了找到两个 v_id 值都可用的文件,您可以计算它们的唯一出现次数,它应该是 2。

此外,如果 v_id 是整数,您可以使用 IN (1,2) 而不是 IN ('1', '2')。尝试:

SELECT f.f_id, f.fname
FROM mapping AS m
INNER JOIN detail AS d ON d.d_id=m.d_id
INNER JOIN file AS f ON m.f_id=f.f_id
WHERE m.v_id IN (1,2)
GROUP BY m.f_id
HAVING COUNT(DISTINCT m.v_id) = 2