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

标签 sql

我正在尝试从多对多表配置中提取数据。
如果这个解释含糊不清,我很抱歉,但这是我能做的最好的事情,而不需要对我的程序的整个内部工作进行冗长的解释。

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

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

所以表一是项目列表,表二是颜色列表。
当然,第三张表保存这些关系。

我试图让模块只显示表二中存在于表一中所有项目中的元素。

在这种情况下,它会将显示的元素剥离为绿色,因为这是唯一的公共(public)元素。

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

谢谢。

更新为清楚起见:

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

这是我到目前为止的原始形式,而不是我使用的颜色示例。
在此代码标签中,颜色将相等,而其他标签将相等...
SELECT DISTINCT tag.name
FROM other_tag_relationship AS otr
JOIN tag ON otr.tag_id = tag._id
WHERE otr.other_id in (2, 3, 4);

这显然会返回所有给定其他标签的所有标签的不同列表。

我现在要做的是仅显示所有其他标签中可用的标签并丢弃其余标签。例如,从 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 
                    )

关于sql - 如何在多对多查询的一侧找到最小公分母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3122479/

相关文章:

mysql - 无法在 MySQL 触发器中声明变量

mysql - 将一个表的不同记录插入另一个表到 MySQL

mysql - MySQL JOIN 是重操作吗?

sql - 交易重复错误

php - 签名 png 不显示

mysql - 在 MySQL 表中添加项目

sql - 将来自三个不同查询的数字加在一起

php - 插入相当于 "exists"

php - MYSQL中获取表中某列为空的值

sql - 如何连接两个表但只返回不匹配的行?