Эмуляция FULL OUTER JOIN в MySQL?

Здравствуйте.

Есть базы `paragraph`(`paragraph`, `position`) и `figure`(`figure`, `figcaption`, `position`), например, со следующими данными:

Paragraph | 1
Paragraph | 3

Figure | Figcaption | 2.

Нужно слить их воедино по колонке `position`, чтобы в итоге получить следующее:

1 | Paragraph | (NULL) | (NULL)
2 | (NULL) | Figure | Figcaption
3 | Paragraph | (NULL) | (NULL).

LEFT JOIN UNION RIGHT JOIN не выполняет свою функцию, ибо записи не группируются по `position`, эта колонка вовсе дублируется для каждой из таблиц.

ce2fbaf842d448e6ae840495c346f1de.pngWHERE не учитывается, если указывать его в подзапросах.
066ed85b732c44e2905cf0eafc5f1031.pngА вот это запрос без общих JOIN, быстрее и выводит все то самое, но еще и корректно учитывает WHERE.
c3fc77a849194bb685b723524b36ba9b.png

Так лучше?
  • Вопрос задан
  • 2737 просмотров
Решения вопроса 1
WebSpider
@WebSpider
SELECT * FROM
(SELECT DISTINCT position FROM paragraph
UNION
SELECT DISTINCT position FROM figure
) t1
LEFT JOIN paragraph USING (position)
LEFT JOIN figure USING (position)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы