mySQL - Как мне сопоставить один индекс с другим и присоединиться к другой таблице? - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть две таблицы с разными индексами, которые я могу (вручную) сопоставить с одной на другую:

table1             table2
ID  Name  Data     ID  Name  Data
1   A     X        4   C1    11
2   B     Y        5   B2    22
3   C     Z        6   A3    33

A отображается на A3, B отображается на B2, C отображается на C1

Набор результатов, на который я надеюсь:

t1.ID  t1.Name  t1.Data  t2.ID  t2.Name  t2.Data
1      A        X        6      A3       33
2      B        Y        5      B2       22
3      C        Z        4      C1       11

Этот запрос не выполняется, потому что он не распознает "map":

SELECT *,
   CASE t1.name
      WHEN 'A' THEN 'A3'
      WHEN 'B' THEN 'B2'
      WHEN 'C' THEN 'C1'
      END AS map
FROM table1 AS t1
INNER JOIN table2 AS t2 ON (t2.name = map)

Этот запрос не выполняется, поскольку вы можете не используйте CASE в состоянии ON:
[Этот запрос действительно работает. Я забыл КОНЕЦ в моем фактическом коде. Оказывается, это имеет большое значение.]

SELECT *
FROM table1 AS t1
INNER JOIN table2 AS t2 ON (t2.name = (SELECT CASE t1.name
      WHEN 'A' THEN 'A3'
      WHEN 'B' THEN 'B2'
      WHEN 'C' THEN 'C1'
      END ) )

Итак, мои вопросы:

1) Какие поисковые запросы Google я должен использовать, чтобы найти нужное решение?

2) Какое реальное решение?

3) Можно ли это сделать без создания таблицы поиска (самое простое решение)?

1 Ответ

1 голос
/ 15 апреля 2020

Предложение where не может получить доступ к псевдониму, определенному в предложении select (поскольку, в основном, первое значение оценивается перед последним).

Требуется case выражение вместо условия join:

SELECT 
    t1.ID t1_id, 
    t1.name t1_name, 
    t1.data t1_data, 
    t2.ID t2_id, 
    t2.name t2_name, 
    t2.data t2_data
FROM table1 AS t1
INNER JOIN table2 AS t2 
    ON t2.name = CASE t1.name
      WHEN 'A' THEN 'A3'
      WHEN 'B' THEN 'B2'
      WHEN 'C' THEN 'C1'
    END

Обратите внимание, что в предложении select лучше использовать псевдонимы для устранения неоднозначности столбцов с одинаковыми именами в таблицах, как показано выше;

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