Я думаю, что вам нужно сделать LEFT JOIN
, начиная с основной таблицы, чтобы вернуть все записи из основной таблицы, независимо от того, имеют ли они действительные данные в соединенных (как указано в верхнем левом углу 2). кружочки на графике)
СОЕДИНЕНИЕ происходит последовательно, поэтому, если у вас есть 4 таблицы для объединения, и вы всегда хотите, чтобы все записи из вашей основной таблицы, вам нужно продолжать LEFT JOIN
, например:
SELECT * FROM main_table
LEFT JOIN sub_table ON main_table.ID = sub_table.main_table_ID
LEFT JOIN sub_sub_table on main_table.ID = sub_sub_table.main_table_ID
Если вы INNER JOIN
sub_sub_table, он немедленно сократит ваш набор результатов, даже если вы сделали LEFT JOIN
для sub_table.
Помните, что при выполнении LEFT JOIN
необходимо учитывать NULL
возвращаемых значений. Потому что, если ни одна запись не может быть объединена с main_table, LEFT JOIN
заставляет это поле появляться независимо и будет содержать NULL. INNER JOIN
, очевидно, просто "выбрасывает" строку вместо этого, потому что между ними нет действительной связи (нет соответствующей записи на основе идентификаторов, к которым вы присоединились)
Однако вы упомянули, что у вас есть оператор where, который отфильтровывает искомые строки, поэтому ваш вопрос по JOIN не имеет значения, поскольку это не ваша настоящая проблема. (Это если я правильно понимаю ваши комментарии)