我可以使用自我联接来获取此表吗?>

问题描述 投票:1回答:1

我有以下格式的数据:

国家

lang | code | name
==========================
EN     1001   Italy
IT     1001   Italia
RO     1001   Italia
AL     1001   Itali
TR     1001   Italya
--------------------------
EN     1002   Greece
RO     1002   Grecia
AL     1002   Greqi
TR     1002   Yunanistan
--------------------------
EN     1003   Romania
AL     1003   Rumani
TR     1003   Romanya
--------------------------

我想选择所有名称,但还要多一列,在其中我会以特定语言(例如EN)列出该国家(具有相同代码)的名称。

我要打印此表:

lang | code | name        | name_EN
===================================
EN     1001   Italy         Italy
IT     1001   Italia        Italy
RO     1001   Italia        Italy
AL     1001   Itali         Italy
TR     1001   Italya        Italy
-----------------------------------
EN     1002   Greece        Greece
RO     1002   Grecia        Greece
AL     1002   Greqi         Greece
TR     1002   Yunanistan    Greece
-----------------------------------
EN     1003   Romania       Romania
AL     1003   Rumani        Romania
TR     1003   Romanya       Romania
-----------------------------------

我尝试使用自连接,但没有成功。

SELECT t1.lang AS lang
    , t1.code  AS code
    , t1.name  AS name
    , t2.name  AS name_EN
FROM countries t1
INNER JOIN countries t2 
    ON t2.name = t1.name
    AND t2.lang = 'EN'

从该查询中,我仅获得lang EN中的名称;每个国家1个名称。

lang | code | name        | name_EN
===================================
 EN    1001   Italy         Italy
 EN    1002   Greece        Greece
 EN    1003   Romania       Romania

如果删除t2.lang = 'EN'条件,则新列与现有名称列相同。

  1. 我实际上可以使用自我联接获得这种表吗?如果是,如何?

  2. 如果无法通过自连接完成此操作,那么在MySql中尝试这样做是否值得(在性能方面),还是我最好以编程方式进行此操作?

  3. 您可以在这里进行测试。https://paiza.io/projects/e/oahtrlObx_ctyHBZFnzDvA

我有以下格式的数据:国家/地区:lang |代码名称============================= EN 1001意大利IT 1001 Italia RO 1001 Italia AL 1001 Itali TR 1001 ...

mysql sql self-join
1个回答
2
投票

此查询将为您提供所需的结果。它使用自我连接,但仅连接到表中具有lang=EN的值,并在code上连接,因此无论当前语言如何,我们都可以获取英文名称:

© www.soinside.com 2019 - 2024. All rights reserved.