Могу ли я использовать самостоятельное соединение, чтобы получить эту таблицу - PullRequest
1 голос
/ 27 сентября 2019

У меня есть некоторые данные в следующем формате:

Страны:

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, или мне лучше делать это программно?

Вы можете проверить это здесь.https://paiza.io/projects/e/oahtrlObx_ctyHBZFnzDvA

1 Ответ

2 голосов
/ 27 сентября 2019

Этот запрос даст вам результаты, которые вы хотите.Он использует самостоятельное соединение, но только со значениями в таблице, которые имеют 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

Демонстрация на dbfiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...