如何在mysql中获得清晰的结果?
我想查找基于v_id的所有通用文件 我有三张桌子如何在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 -----
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')
。