У меня есть 3 таблицы A, B и T
T содержит внешний ключ к таблицам A и B соответственно.
Теперь я хотел бы получить все строки (A, B, T), даже если T пуст.
SELECT * from
A
LEFT OUTER JOIN T t1 ON t1.A_ID = A.id,
B
LEFT OUTER JOIN T t2 ON t2.B_ID = B.id
WHERE A.B_ID = B.ID
Теперь проблема в том, что я получаю слишком много строк, поэтому я добавляю следующее:
AND t1.id = t2.id
Но теперь я вообще не получаю строк, которых я пытался избежать в первую очередь, включив LEFT OUTER JOIN.
РЕДАКТИРОВАТЬ: Помимо любых выборочных данных или макета таблицы, мой вопрос заключается просто в том, если таблица T с зависимостями внешнего ключа от более чем ОДНОЙ таблицы в этом случае A + B нуждается в 2 левых внешних соединениях, как указано выше, или, может быть, там есть другой способ?
Простая ссылка на таблицу A во втором левом соединении, как предлагали некоторые пользователи, не может работать, поскольку она выходит за рамки, также объясняется здесь
Таким образом, это работает, если вы окружите обе таблицы скобками:
SELECT * from (A, B)
LEFT OUTER JOIN T t ON t.A_ID = A.id and t.B_ID = B.id
,иJOIN. Попробуйте использовать один, предпочтительноJOIN. Кроме того, вы можете () части вашего запроса, такие как(A LEFT JOIN T ON ???) INNER JOIN (B LEFT JOIN T ON ???) ON ???- person MatBailie   schedule 04.01.2012