从 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 个联结表中提取数据的查询的主要内容,如果未能解决你的问题,请参考以下文章