SQL select объединить два столбца в один
у меня есть четыре таблицы:
Таблица A:
ID | B_ID
----------
 1 |  5
 2 |  6
 3 |  7
 4 |  8
Таблица B:
B_ID
-----
 5
 6
 7
 8
Таблица C:
C_ID | C_Name
--------------
 5   | Alpha
 6   | Beta
Таблица D:
D_ID | D_Name
--------------
 7   | Delta
 8   | Gamma
обратите внимание, что значения в таблице B могут исходить из таблицы C или таблицы D.
мне нужен запрос, который показывает ID из таблицы A и второй столбец под названием Name который состоит из соответствующих имен, основанных на B_ID столбец таблицы B.
в ожидаемый результат должен выглядеть так:
ID | Name
----------
 1 |  Alpha
 2 |  Beta
 3 |  Delta
 4 |  Gamma
то, что я пробовал, это запрос:
SELECT *
FROM B
LEFT OUTER JOIN C
ON B_ID = C_ID
LEFT OUTER JOIN D
ON B_ID = D_ID
это дает:
B_ID | C_ID  | C_Name | D_ID | D_Name
-------------------------------------
 5   |  5    | Alpha  | Null | Null
 6   |  6    | Beta   | Null | Null
 7   |  Null | Null   | Null | Delta
 8   |  Null | Null   | Null | Gamma
тем не менее, у меня все еще есть два вопроса:
- мне нужно объединить их в один столбец (см. Ожидается результат выше)
 - это должен быть подзапрос 
SELECTна основе Таблица A, чтобы показатьIDстолбец таблицы A. 
3 ответов
вот один из вариантов использования подзапроса с union all:
select a.id, b.name
from tablea a
   join (select id, name from tablec 
         union all select id, name from tabled) b on a.B_ID = b.id
вы можете заменить * С выражениями, которые делают то, что вы хотите 
SELECT B.B_ID
     , COAELESCE(C.C_NAME,D.D_NAME) AS `Name`
и добавление соединения в таблицу A не сложно...
SELECT A.A_ID                       AS `Id`
     , COAELESCE(C.C_NAME,D.D_NAME) AS `Name`
  FROM A
  LEFT
  JOIN B
    ON B.B_ID = A.B_ID
  LEFT
  JOIN C
    ON C.C_ID = B.B_ID
  LEFT
  JOIN D
    ON D.D_ID = B.B_ID
 ORDER
    BY A.A_ID
Если вам нужна другая обработка для значений NULL или для обработки потенциальных повторяющихся значений ID, запрос можно настроить. (Пример запроса предполагает уникальные значения для столбцов x_ID.)
учитывая таблицы, как определено, я предлагаю следующий запрос:
SELECT A.ID, C.C_NAME
FROM @A A INNER JOIN @C C ON A.B_ID=C.C_ID
UNION
SELECT A.ID, D.D_NAME
FROM @A A INNER JOIN @D D ON A.B_ID=D.D_ID
Если вы думаете, что могут быть возвращены повторяющиеся значения, и вы хотите их использовать UNION ALL вместо UNION.