Mysql 我可以使用self-join获取此表吗
我有以下格式的一些数据: 国家:Mysql 我可以使用self-join获取此表吗,mysql,sql,self-join,Mysql,Sql,Self Join,我有以下格式的一些数据: 国家: 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 G
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
--------------------------
我想选择所有的名字,但还有一列,在其中我用一种特定的语言(比如英语)列出了那个国家的名字(代码相同)
我要打印此表:
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
-----------------------------------
我尝试过使用self-join,但没有成功
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'
从这个查询中,我只得到langen中的名称;每个国家一个名字
lang | code | name | name_EN
===================================
EN 1001 Italy Italy
EN 1002 Greece Greece
EN 1003 Romania Romania
如果删除t2.lang='EN'
条件,则新列与现有名称列相同
此查询将为您提供所需的结果。它使用自联接,但仅对表中具有
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
还有一个问题:条件的顺序会影响性能吗(在一个大表中,大的是100k+行)@jack条件的顺序应该不会有任何区别。在(语言、代码)上建立索引应该会有所帮助。