如果问题是通用的,我很抱歉,有时很难定义标题。
所以,基本上,我在SQL中有3个表:
id,Name,Description
)id, Description
)id, id_machine, id_option
),它基本上告诉哪些机器包含哪些选项因此,在某些时候,在我正在开发的应用程序中,用户选择他想要的选项。现在我需要采用这些选项,并以某种方式查询MAPPING表并仅返回包含这些选项的计算机。
映射表示例:
id | id_opt | id_mach
---+--------+---------
1 | Opt1 | Mach1
2 | Opt2 | Mach1
3 | Opt3 | Mach1
4 | Opt4 | Mach1
5 | Opt1 | Mach2
6 | Opt3 | Mach2
7 | Opt9 | Mach3
8 | Opt11 | Mach3
想象一下,用户选择Opt1, Opt3 and Opt4
。在这种情况下我需要返回,例如,只有Mach1。
我已经尝试在INNER JOIN
中选择了id_opt
的3个表之间创建了两个{{1}}但是它没有被机器区分,它返回包含至少一个用户的所有机器选项。
答案 0 :(得分:3)
SELECT id_mach
FROM MAPPING
WHERE id_opt IN ('Opt1', 'Opt3', 'Opt4')
GROUP BY id_mach
HAVING COUNT(DISTINCT id_opt) = 3
如果您还需要机器名称和说明,请进行联接以获取该信息:
SELECT t1.Name, t1.Description
FROM MACHINE t1
INNER JOIN
(
SELECT id_mach
FROM MAPPING
WHERE id_opt IN ('Opt1', 'Opt3', 'Opt4')
GROUP BY id_mach
HAVING COUNT(DISTINCT id_opt) = 3
) t2
ON t1.id = t2.id_mach