ПОЛНОЕ НАРУЖНОЕ СОЕДИНЕНИЕ с SQLite

55

SQLite имеет только INNER и LEFT JOIN.

Есть ли способ сделать FULL OUTER JOIN с SQLite?

Теги:
join
full-outer-join

2 ответа

93
Лучший ответ

Да, см. пример в Wikipedia.

SELECT employee.*, department.*
FROM   employee 
       LEFT JOIN department 
          ON employee.DepartmentID = department.DepartmentID
UNION ALL
SELECT employee.*, department.*
FROM   department
       LEFT JOIN employee
          ON employee.DepartmentID = department.DepartmentID
WHERE  employee.DepartmentID IS NULL
  • 0
    Пример Wikipedia формирует UNION из трех запросов, где в вашем примере только два. Можете ли вы объяснить разницу?
  • 3
    @GrahamBorland: код в моем ответе был взят из Википедии. Я думаю, что Википедия была отредактирована, так как я отправил. Разница в том, что они используют внутреннее соединение и два выбора для получения несоответствующих записей (по одной для каждой таблицы). Запрос в моем ответе объединяет внутреннее соединение и один из выборов в левое соединение. Это (A) + (B) + (C) по сравнению с (A + B) + (C).
Показать ещё 4 комментария
4

Следуя комментарию Джонатана Леффлера, здесь альтернативный ответ на вопрос Марка Байерса:

SELECT * FROM table_name_1 LEFT OUTER JOIN table_name_2 ON id_1 = id_2
UNION
SELECT * FROM table_name_2 LEFT OUTER JOIN table_name_1 ON id_1 = id_2

Смотрите здесь для исходных исходных и последующих примеров SQLite.

  • 3
    Я думаю, ГДЕ сотрудник. DepartmentID is NULL является обязательным, хотя вы не возражаете, чтобы получить строку дублирования
  • 1
    Если я не ошибаюсь, это должно иметь тот же результат, UNION будет сопоставлять дубликаты записей, но менее эффективен, чем UNION ALL.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню