Заранее извиняюсь, если этот конкретный вопрос уже был задан и получен ответ ... существует так много разных способов использования команды JOIN, что может быть трудно найти точный ответ на данную проблему.Я новичок в SQL, поэтому ... если решение существует, не стесняйтесь указывать мне на него.
Я пытаюсь объединить 3 разные таблицы и считаю, что то, что я хочу, эквивалентноFULL OUTER JOIN (не поддерживается MySQL, как я понимаю) на всех 3 таблицах.Рассмотрим диаграмму Венна с 3 кружками;Мне нужно полное объединение всех трех окружностей, включая полное пересечение, все три парных соединения (где одна таблица возвращает NULL) и все три отдельных экземпляра (где две таблицы возвращают NULL).Я верю, что то, что у меня есть, сработает, но это грубая сила, и я уверен, что есть более эффективный способ.Я также немного обеспокоен своим использованием WHERE NOT EXISTS, поэтому, пожалуйста, исправьте меня, если это необходимо.Вот суть моего кода:
// Intersection of all three tables
SELECT [table1.cols], [table2.cols], [table3.cols]
FROM table1
INNER JOIN table2
ON table1.col1 = table2.col1
INNER JOIN table3
ON table1.col1 = table3.col1
UNION ALL
// Intersection of tables one and two
SELECT [table1.cols], [table2.cols], [NULLS]
FROM table1
INNER JOIN table2
ON table1.col1 = table2.col1
WHERE NOT EXISTS (table1.col1 = table3.col1)
UNION ALL
// Intersection of tables two and three
SELECT [NULLS], [table2.cols], [table3.cols]
FROM table2
INNER JOIN table3
ON table2.col1 = table3.col1
WHERE NOT EXISTS (table2.col1 = table1.col1)
UNION ALL
// Intersection of tables three and one
SELECT [table1.cols], [NULLS], [table3.cols]
FROM table3
INNER JOIN table1
ON table3.col1 = table1.col1
WHERE NOT EXISTS (table3.col1 = table2.col1)
UNION ALL
// Only in table one
SELECT [table1.cols], [NULLS], [NULLS]
FROM table1
WHERE NOT EXISTS ((table1.col1 = table2.col1))
AND NOT EXISTS ((table1.col1 = table3.col1))
UNION ALL
// Only in table two
SELECT [NULLS], [table2.cols], [NULLS]
FROM table2
WHERE NOT EXISTS ((table2.col1 = table1.col1))
AND NOT EXISTS ((table2.col1 = table3.col1))
UNION ALL
// Only in table three
SELECT [NULLS], [NULLS], [table3.cols]
FROM table3
WHERE (NOT EXISTS (table3.col1 = table1.col1))
AND (NOT EXISTS (table3.col1 = table2.col1))
TIA за вашу помощь и вашу милость.:)