Приносим извинения заранее, если этот вопрос уже задан и дан ответ ... существует так много различных способов использования команды JOIN, что может быть трудно найти точное ответ на заданную проблему. Я начинающий SQL, поэтому ... если решение существует, не стесняйтесь указывать на него.SQL - присоединиться к нескольким таблицам с одним небольшим уловом
Я пытаюсь присоединиться к 3-мя различным таблицам, и я считаю, что то, что я хочу, эквивалентно FULL OUTER JOIN (не поддерживается MySQL, как я понимаю) на всех трех таблицах. Рассмотрим диаграмму Венна с тремя кругами; Я хочу, чтобы полный союз всех трех кругов, включая полное пересечение, все три парных соединения (где одна таблица возвращает 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))
ТИА за вашу помощь, и ваша светлость. :)
Я предполагаю, что я должен отметить, ... «один маленький улов», который, кажется, делает это отличным от большинства вопросов о соединении нескольких таблиц, заключается в том, что я хочу сохранить все данные из всех трех таблиц в объединенной таблице. –
Посмотрите на решение здесь: http://stackoverflow.com/questions/2384298/mysql-full-outer-join-syntax-error – diaho
Итак, из ответа Cletus на три таблицы: вы уверены, что это не приведет в двойную дату в объединенной таблице? –