如何在 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
我想根据 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