Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 我可以使用self-join获取此表吗_Mysql_Sql_Self Join - Fatal编程技术网

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'
条件,则新列与现有名称列相同

  • 我真的可以使用自连接得到这种表吗?如果是,如何进行

  • 如果使用自连接无法做到这一点,那么在MySql中尝试这样做(性能方面)是否值得,或者我是否更适合以编程方式进行

  • 你可以在这里测试。

    此查询将为您提供所需的结果。它使用自联接,但仅对表中具有
    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条件的顺序应该不会有任何区别。在(语言、代码)上建立索引应该会有所帮助。