Как сказал MJB, вам нужно использовать внешнее соединение, чтобы строки a
включались, когда в b
нет соответствующих строк.
Если вы хотите ограничить совпадающие строки в b
теми, которые соответствуют другому условию, вам нужно поместить эти условия в выражение JOIN для b
.Если вы оставите условия для b
в предложении WHERE, это исключит соединенные строки, в которых столбцы b
равны NULL из-за внешнего соединения.
SELECT DISTINCT
`a`.*,
`b`.*,
`c`.*
FROM `a`
LEFT OUTER JOIN (`b` INNER JOIN `c` ON (`c`.`id` = `b`.`c_id`))
ON (`b`.`a_id` = `a`.`id` AND `b`.`foo` = 'bar')
WHERE `a`.`id` = 12345
Обратите внимание, я использовал скобки для объединения c
в b
перед вычислением внешнего соединения с a
.
Также я рекомендую использовать одинарные кавычки для строковых литералов, а не двойные кавычки.Просто чтобы привыкнуть использовать стандартный SQL, где это возможно, вместо специфического для MySQL синтаксиса.