MySQL Join 查询:两个主表和一个链接表

Posted

技术标签:

【中文标题】MySQL Join 查询:两个主表和一个链接表【英文标题】:MySQL Join query: Two main and one linking table 【发布时间】:2020-03-14 18:03:48 【问题描述】:

我正在为 Uni 开展一个星球大战项目。

在我的数据库中,我有多个表和链接表。我正在查询

“Rey、Obi-Wan Kenobi 和 C-3PO?”

答案(显然)是千年隼号。

我已经使用 INNER JOIN 设置了查询,但我被困在了最后。

SELECT t.type AS OnlyTransportItCouldBe 
FROM transport AS t
INNER JOIN person_transport AS pt
ON pt.transport_id = t.id
INNER JOIN person AS p
ON pt.person_id = p.id
WHERE p.name = 'Rey'

以上返回 3 艘船,但我对如何检查老本和金棒感到困惑。我试过AND p.name = "Obi-Wan Kenobi",它返回空白。如果我尝试WHERE p.name = 'Rey', 'Obi-Wan Kenobi' 它会失败,如果我尝试WHERE p.name = 'Rey' AND 'Obi-Wan Kenobi',结果是空白的。我知道这很简单,但我似乎找不到解决方案。

【问题讨论】:

好的,所以我试过了 - 或者 WHERE p.name IN ('Rey', 'Obi-Wan Kenobi', 'C-3PO') - 它出错了,所以我尝试了 - WHERE p.name IN ('Rey', 'Obi-Wan Kenobi', 'C-3PO') - 它返回了所有与它们相关的船只。 请通过编辑而不是 cmets 澄清。 请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出您可以给出的最少代码,即您显示的代码可以通过您显示的代码扩展为不正常。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。 How to Ask 停止尝试编写您的总体目标并从给定的代码中解释您的期望以及原因。 这是一个常见问题解答。在考虑发布之前,请阅读手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有和没有您的特定字符串/名称和站点:***.com 和标签;阅读许多答案。如果您发布问题,请使用一个短语作为标题。请参阅How to Ask 和投票箭头鼠标悬停文本。除非我们努力(重新重新)写清楚,否则我们无法推理、交流或搜索。 重复***.com/q/1202668/3404097 【参考方案1】:

如果您的要求是获得 ReyObi-Wan Kenobi 使用过的常见交通方式C-3PO 那么你必须 group by type 并添加一个 having 子句,例如:

SELECT t.type AS OnlyTransportItCouldBe 
FROM transport AS t
INNER JOIN person_transport AS pt ON pt.transport_id = t.id
INNER JOIN person AS p ON pt.person_id = p.id
WHERE p.name IN ('Rey', 'Obi-Wan Kenobi', 'C-3PO')
GROUP BY t.type
HAVING COUNT(DISTINCT p.name) = 3

【讨论】:

您好。不完全的。我要做的是展示他们都使用过的唯一一艘船。我确实尝试了您建议的代码,但它返回了一个空结果。但是,将 DISTINCT 从 3 更改为 2 有效。谢谢朋友

以上是关于MySQL Join 查询:两个主表和一个链接表的主要内容,如果未能解决你的问题,请参考以下文章

MySQL内连接(INNER JOIN)

MySQL--什么情况下不建议使用join查询

MySQL--什么情况下不建议使用join查询

在 MySQL 和 PHP 中使用多表和 LEFT JOIN 查询非常慢

是否可以在sql中用HS join替换NL join

多表关联查询语法?