从 2 个联结表中提取数据的查询

Posted

技术标签:

【中文标题】从 2 个联结表中提取数据的查询【英文标题】:Query to Pull Data from 2 Junction Tables 【发布时间】:2015-04-23 17:05:44 【问题描述】:

我正在为漫画创建一个数据库。现在我有 3 个主表(comics、publishers、people)和 3 个联结表(person2comic、publisher2comic 和 person2publisher)。我希望能够有一个搜索表单,允许按标题、期号、出版商和人员的任意组合进行搜索。当只引用一个联结表时,我会根据要搜索的内容使用它的变体:

SELECT comicTitle, comicIssue, firstName, lastName 
FROM person2comic 
JOIN comics ON comics.comicID = person2comic.comicID 
AND comics.comictitle LIKE "%walk%" ;

如果有人要按标题、出版商和个人进行搜索,我不确定如何设置语句,因为它需要使用两个联结表。是嵌套查询情况还是其他情况?

【问题讨论】:

comics, publishers, persons 之间的关系是多对多的吗?一部漫画真的可以有多个出版商吗?我觉得你可能对这三个连接表有一些建模冗余。 为什么人与漫画和出版商都有关系? 【参考方案1】:

您可以有任意多个连接。不完全确定您的所有列名,但这应该大致有效:

SELECT * 
FROM people
JOIN person2comic p2c ON people.id = ptc.person
JOIN comic ON p2c.comic = comic.id
JOIN publisher2comic pub2c ON comic.id = pub2c.comic
JOIN publisher ON pub2c.publisher = publisher.id

另请注意,如果您的关系都不是多对多的,那么您的架构可能效率低下。请参阅我的评论。

【讨论】:

这并不常见,但漫画偶尔会切换出版商,所以我为这些实例创建了该表。 哦,但这似乎也有效,非常感谢! 您的映射表看起来确实是圆形的。你有 A->B、B->C 和 A->C。它们不应该都是必需的。您可能会从您的联接中获得重复项。请注意,我在上面的查询中只使用了您的两个映射表。 是的,我肯定会重复。我真的不确定如何正确地进行搜索。例如,假设有人想要查找由 Marvel 发布的“变形金刚”问题列表,而不是 IDW,并且只有 Bob Budiansky 参与的问题。我会首先参考漫画表,然后参考 publisher2comic 以找到缩小 Marvel 问题的结果,然后参考 person2comic 以获取正在搜索的内容。但它不知道我是如何尝试的。 你能帮我理解数据吗?什么是人?是漫画的作者吗?还是那个为出版商工作的人?

以上是关于从 2 个联结表中提取数据的查询的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 查询从表中检索数据和第二个查询以提取其他结果,没有重复

1 小时 SQL 极速入门

查询表中的所有数据,仅连接联结表中的最新记录

查询联结表中FK引用的表中的其他字段

Mysql从入门到入魔——6. 表联结组合查询

1 小时 SQL 极速入门