MySQL使用左连接将多列匹配为一[重复]

Posted

技术标签:

【中文标题】MySQL使用左连接将多列匹配为一[重复]【英文标题】:MySQL matching many columns into one with left join [duplicate] 【发布时间】:2016-11-17 04:06:27 【问题描述】:

我有两张这样的桌子

name  | fNatId | mNatId
=======================
Smith |      1 |      1
Doe   |      1 |      0
Owen  |      0 |      2

还有这个

id | countryName
================
 0 | U.S.
 1 | U.K.
 2 | Canada

我想把第一个表翻译成这个

Name    | Father's Nationality | Mother's Nationality
=====================================================
Smith   | U.K.                 | U.K.
Doe     | U.K.                 | U.S.
Owen    | U.S.                 | Canada

我该怎么做?使用两个 LEFT JOIN's throws Not unique table/alias 错误。仅使用一个会将两列都匹配到父亲或母亲的列。

【问题讨论】:

【参考方案1】:

您需要为您的表使用唯一的别名。考虑到您的第一张桌子为users,第二张桌子为countries,您是否尝试过这种方式?以下应该完全符合您的要求。

SELECT u.name as Name, c1.countryName as FathersNationality, c2.countryName as MothersNationality

FROM users as u

LEFT JOIN countries as c1 ON c1.id = u.fNatId

LEFT JOIN countries as c2 ON c2.id = u.mNatId

【讨论】:

以上是关于MySQL使用左连接将多列匹配为一[重复]的主要内容,如果未能解决你的问题,请参考以下文章

我们如何在 MySQL 5.5 中快速进行此查询(按多列分组 + 排序,具有 2 个左连接)?

MySQL 的内连接、左连接、右连接有啥区别?

MySQL使用多个左连接获取重复项

mysql中的左连接和右连接有啥区别[重复]

MySql连接——内连接外连接(左连接右连接全连接)

mysql:左连接内连接in()语句以及对比