sql – 如何在多对多查询的一侧找到最小公分母

我正在尝试从多个表配置中提取数据.

如果这个解释含糊不清,我很抱歉,但如果不对我的程序的整个内部工作进行冗长的解释,这是我能做的最好的事情.

我在一个应用程序中有2个模块.
第一单元显示与一组项目相关的信息.
它会删除所有项目中不存在的信息. (最低公分母)

所以…
第一项是红色和绿色.
第二项是绿色和蓝色.
第三项只是绿色.

因此,表一是项目列表,表格二是颜色列表.
当然,第三张表格保存了关系.

我试图让模块只显示表2中的所有项目中的元素.

在这种情况下,它会将显示的元素剥离为绿色,因为这是唯一的常见元素.

我尝试以编程方式执行此操作,这是查看和调试的噩梦.那将是一个移动应用程序,所以所有的for循环将真正落后于我的程序.我知道必须有一种方法可以用SQL做到这一点,但经过几个小时的研究,我仍然无法理解如何.

谢谢.

为清晰起见更新:

好的,我在我的问题上犯了2个错误.
首先,我不是在寻找常见的数量,我正在寻找共同的价值.
所以我只想要在所有三个项目中都存在颜色并丢弃其余的颜色.
其次,我应该更加具体.我正在为Android手机开发应用程序,所以我使用的是Java和SQLite.

这是我到目前为止的原始形式,而不是我使用的颜色示例.
在这个代码标签将等于颜色和其他将等于项目…

SELECT DISTINCT tag.name
来自other_tag_relationship AS otr
JOIN标签ON otr.tag_id = tag._id
在(2,3,4)中的otr.other_id;

这显然会返回所有给定其他标记的所有标记的明确列表.

我现在要做的是仅显示所有其他标签中可用的标签并丢弃其余标签.比如删除2中不属于3和4的任何标签.此外,列表(2,3,4)将在运行时动态生成.

再次感谢.

最佳答案 根据您的描述,您可能希望通过中间表3(ItemColors)获得与所有项目(表1)相关联的颜色列表(表2):

Select IC.ColorId, C.Name
From ItemColors As IC
    Join Colors As C
        On C.Id = IC.ColorId
Group By IC.ColorId, C.Name
Having Count(*) =   (
                    Select Count(*) 
                    From Items As I2 
                    )
点赞