如何在mysql中获得清晰的结果?

如何在mysql中获得清晰的结果?,mysql,distinct,Mysql,Distinct,我想查找基于v_id的所有通用文件 我有三张桌子 detail ---------------------------- |d_id |v_id |d_name |--------|--------|--------- |1 |1 |detail_A |2 |1 |detail_B |3 |2 |detail_C file -----

我想查找基于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,因为我的目标是基于v_id查找公共文件 但是使用上面的查询,我得到了文件X,文件W

预期产出

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

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

此外,如果
v_id
是整数,则可以在(1,2)中使用
而不是在('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

将您的预期输出(根据给定的样本数据)以表格形式添加到问题中。您的数据似乎未规范化。@TimBiegeleisen。你能解释一下应该是怎样的吗?你的两个表维护着
d\u id
v\u id
之间的关系。理想情况下,只有一个映射表可以跟踪此情况。详细表中有更多的数据和内容,如
d_name
和其他我没有在此处显示的列…这些数据和内容将在映射表中重复…这就是我将其分开的原因。它在我的数据库中是整数。@NishitKotak检查更新的答案,不要使用
('1','2')