Объединить столбцы на двух левых соединениях - PullRequest
0 голосов
/ 08 января 2019

У меня есть 3 таблицы, как показано:

Video
+----+--------+-----------+
| id |  name  | videoSize |
+----+--------+-----------+
|  1 | video1 | 1MB       |
|  2 | video2 | 2MB       |
|  3 | video3 | 3MB       |
+----+--------+-----------+

Survey
+----+---------+-----------+
| id |  name   | questions |
+----+---------+-----------+
|  1 | survey1 |         1 |
|  2 | survey2 |         2 |
|  3 | survey3 |         3 |
+----+---------+-----------+

Sequence
+----+---------+-----------+----------+
| id | videoId | surveyId  | sequence |
+----+---------+-----------+----------+
|  1 | null    | 1         |        1 |
|  2 | 2       | null      |        2 |
|  3 | null    | 3         |        3 |
+----+---------+-----------+----------+

Я бы хотел запросить последовательность и объединение таблиц видео и опросов и объединить общие столбцы без указания имен столбцов (в данном случае name), например:

Query Result:
+----+---------+-----------+----------+---------+-----------+-----------+
| id | videoId | surveyId  | sequence |  name   | videoSize | questions |
+----+---------+-----------+----------+---------+-----------+-----------+
|  1 | null    | 1         |        1 | survey1 | null      | 1         |
|  2 | 2       | null      |        2 | video2  | 2MB       | null      |
|  3 | null    | 3         |        3 | survey3 | null      | 3         |
+----+---------+-----------+----------+---------+-----------+-----------+

Возможно ли это?

Кстати, нижеприведенный sql не работает, поскольку он не сливается с полем name:

SELECT * FROM "Sequence"
LEFT JOIN "Survey" ON "Survey"."id" = "Sequence"."surveyId"
LEFT JOIN "Video" ON "Video"."id" = "Sequence"."videoId"

1 Ответ

0 голосов
/ 08 января 2019

Этот запрос покажет, что вы хотите:

select
  s.*,
  coalesce(y.name, v.name) as name, -- picks the right column
  v.videoSize,
  y.questions
from sequence s
left join survey y on y.id = s.surveyId
left join video v on v.id = s.videoId

Однако стандарт SQL требует, чтобы вы называли нужные столбцы. Единственным исключением является *, как показано выше.

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