#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. Это ПЕРЕКРЕСТНОЕ ОБЪЕДИНЕНИЕ, ПОЛНОЕ относится к ПОЛНОМУ ВНЕШНЕМУ.