Mysql在同一张表上的多个左连接

Posted

技术标签:

【中文标题】Mysql在同一张表上的多个左连接【英文标题】:Mysql multiple left joins on same table 【发布时间】:2013-10-23 08:37:39 【问题描述】:

我有一个表,其中有两个字段引用另一个表的 ID。我需要从另一个表中提取两个字段的名称。

例如。

表格1 worker1 = 2(2 是其他表的键) 工人2 = 4

表2 身份证名称 1 比尔 2弗雷德 3约翰 4 保罗

我需要得到 $worker1name = Fred 和 $worker2name = Paul。

所以我会说这样的话:

SELECT xxx, NAME?, NAME? FROM Table1
LEFT JOIN Table2 AS p1 ON Table1.worker1 = Table2.ID
LEFT JOIN Table2 AS p2 ON Table1.worker2 = Table2.ID
WHERE ...

$table = mysql_query(...);
$rec = mysql_fetch_assoc($table);
$worker1name = $rec['???'];
$worker2name = $rec['???'];

我在最后两个语句中插入什么来获得这两个名称。或者更准确地说,我必须在 SELECT 中添加什么来指定我希望调用表 2 中两个不同版本的 NAME 字段?

【问题讨论】:

【参考方案1】:

你也应该像这样给字段起别名:

SELECT
   xxx,
   p1.NAME as p1name,
   p2.NAME as p2name
FROM Table1
LEFT JOIN Table2 AS p1 ON Table1.worker1 = p1.ID
LEFT JOIN Table2 AS p2 ON Table1.worker2 = p2.ID
WHERE ...

【讨论】:

我收到一个错误:无法运行查询:“on 子句”中的未知列“Table2.ID”(我的表中的等效名称) 修改了查询。 (你必须使用别名有没有。)

以上是关于Mysql在同一张表上的多个左连接的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL:与 Group_Concatenate 一起使用的两个表上的左连接

同一张表上的多个连接,在一个查询中计数

同一张表上的多个连接:转换状态

在同一个表上具有多个连接的 Oracle 复杂查询

表上的左连接 COUNT

中小型表上的左连接非常慢