Как я могу выполнить ПОЛНОЕ объединение НЕСКОЛЬКИХ ТАБЛИЦ в MySQL

#mysql

#mysql

Вопрос:

мы искали это, но все, что мы видим, это 2 таблицы с помощью левого и правого внутренних / внешних соединений.

Я люблю вас, ребята.

Ответ №1:

MySQL не поддерживает ПОЛНОЕ ВНЕШНЕЕ объединение.

Как вы упомянули, вы можете имитировать ПОЛНОЕ ВНЕШНЕЕ объединение двух таблиц, используя комбинацию ЛЕВОГО и ПРАВОГО ВНЕШНИХ соединений.

 SELECT * FROM tableA LEFT JOIN tableB ON tableA.b_id = tableB.id
UNION ALL
SELECT * FROM tableA RIGHT JOIN tableB ON tableA.b_id = tableB.id
WHERE tableA.b_id IS NULL
  

Теоретически тот же метод может быть распространен на более чем две таблицы. Я бы предложил сначала использовать описанный выше подход для объединения двух таблиц в качестве представления. Затем снова используйте тот же подход, чтобы присоединить представление к третьей таблице.

Комментарии:

1. извините, что снова беспокою вас, потому что я только начинаю изучать MySQL, но как я могу присоединиться к таблице просмотра в третьей таблице.

2. @jan estepa: Вы присоединяетесь к представлению таким же образом, как и к таблице: с помощью ключевого слова JOIN.

3. ну, это не обязательно приведет к беспорядку, но это будет происходить медленно. Весь приведенный выше запрос может быть VIEW, и с помощью TableA -> ViewA, TableB -> ViewC вы получаете чистое решение, которое, вероятно, будет медленным (как результаты просмотра? понадобится? должно быть материализовано перед объединением); в качестве альтернативы, разделившись на шесть базовых комбинаций, вы могли бы написать UNION ALL, что должно быть с использованием индексных сканирований (но теперь, вероятно, оправдано называть беспорядочным).

4. @jan estepa: Вероятно, лучше вообще избежать необходимости. Найдите способ изменить свой запрос таким образом, чтобы одно из ПОЛНЫХ ВНЕШНИХ объединений можно было записать как ЛЕВОЕ ВНЕШНЕЕ.

Ответ №2:

Я не знаю, что сказать о части любви, но

Наличие таблиц с именами a и b:

 SELECT a.*, b.* FROM a, b
  

В этом ли фокус?

Комментарии:

1. Это ПЕРЕКРЕСТНОЕ ОБЪЕДИНЕНИЕ, ПОЛНОЕ относится к ПОЛНОМУ ВНЕШНЕМУ.