首页 > 解决方案 > 试图在两个表之间的 MySQL 中链接多对一

问题描述

再会,

我正在从 FileMaker 数据库中获取数据并在 MySQL 中将其用于其他目的。我正在处理一个标题数据库,其中包含作者信息、ISBN、标题、价格等。这个问题的重点在于原始数据库维护主题代码的六个字段。三个用于履行系统,三个 BISC 代码。我创建了一个单独的表,其中包含所有主题代码和描述。我可以在一个标题记录中包含 1 到 6 个可能的代码。

我可以弄清楚如何从一个代码中获取单个描述,但我无法完全弄清楚如何在单个 SELECT 中获取多个描述。我创建了 6 个外键 Sub1,Sub2,Sub3,BI1,BI2,BI3 都指向主题表中的一个代码。Subjects 文件只有两个字段,代码和描述。

我认为这一点应该有效:

SELECT Titles.ISBN,Titles.Title,Titles.Subject_1, Subjects.Description AS S1.Description, Titles.Subject_2, Subjects.Description AS S2.Description 
FROM Titles
Left JOIN Subjects As S1
ON Titles.Subject_1 = S1.Code<
Left JOIN Subjects As S2
ON Titles.Subject_2 = S2.Code
WHERE Subject_2 <> "";

给我一个语法错误。那么如何为每个可能的主题引用一个描述字段呢?从其他谷歌搜索到左边加入,但似乎没有什么不同。对于 SQL 来说还是很新的东西,所以如果我真的忽略了显而易见的事情,请原谅我。这在 Linux 下的 MySQL 5.7 中。

谢谢。

标签: mysqljoinselect

解决方案


你几乎是对的。但是连接表中的列必须在左侧而不是别名

SELECT 
    Titles.ISBN
    ,Titles.Title
    ,Titles.Subject_1
    , S1.Description Description_subject1 
    , Titles.Subject_2
    , S2.Description  Description_subject2
FROM Titles
Left JOIN Subjects As S1
ON Titles.Subject_1 = S1.Code
Left JOIN Subjects As S2
ON Titles.Subject_2 = S2.Code
WHERE Subject_2 <> "";

推荐阅读