我可以使用自连接来获取这个 table
Can I use self join to fetch this table
我有以下格式的一些数据:
国家:
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
--------------------------
我想 select 所有名称,但多了一列,其中我用特定语言(比如 EN)列出了那个国家(具有相同代码)的名称。
我要打印这个 table:
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'
条件,新列与现有名称列相同。
我真的可以使用自连接获得这种 table 吗?如果是,如何?
如果这不能通过自连接完成,是否值得(性能方面)在 MySql 中尝试这样做,还是我最好以编程方式进行?
你可以在这里测试。
https://paiza.io/projects/e/oahtrlObx_ctyHBZFnzDvA
此查询将为您提供所需的结果。它使用自联接,但仅适用于 table 中具有 lang=EN
的值,并且它在 code
上联接,因此无论当前语言如何,我们都可以获取英文名称:
SELECT t1.lang, t1.code, t1.name,
t2.name AS name_EN
FROM countries t1
JOIN countries t2 ON t2.lang = 'EN' AND t1.code = t2.code
输出:
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
我有以下格式的一些数据:
国家:
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
--------------------------
我想 select 所有名称,但多了一列,其中我用特定语言(比如 EN)列出了那个国家(具有相同代码)的名称。
我要打印这个 table:
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'
条件,新列与现有名称列相同。
我真的可以使用自连接获得这种 table 吗?如果是,如何?
如果这不能通过自连接完成,是否值得(性能方面)在 MySql 中尝试这样做,还是我最好以编程方式进行?
你可以在这里测试。 https://paiza.io/projects/e/oahtrlObx_ctyHBZFnzDvA
此查询将为您提供所需的结果。它使用自联接,但仅适用于 table 中具有 lang=EN
的值,并且它在 code
上联接,因此无论当前语言如何,我们都可以获取英文名称:
SELECT t1.lang, t1.code, t1.name,
t2.name AS name_EN
FROM countries t1
JOIN countries t2 ON t2.lang = 'EN' AND t1.code = t2.code
输出:
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