У меня есть две таблицы.
TableA: field_definitions
field_id, field_type, field_length, field_name, field_desc, display_order, field_section, active
TableB: user_data
response_id, user_id, field_id, user_response
Мне нужен запрос, который будет возвращать все строки из таблицы A и, если они существуют, сопоставлять строки из таблицы B на основе определенного идентификатора пользователя.
Вот что у меня есть ...
SELECT field_definitions. * , user_data.user_response
FROM field_definitions
LEFT JOIN user_data
USING ( field_id )
WHERE (
user_data.user_id =8
OR user_data.user_id IS NULL
)
AND field_definitions.field_section =1
AND field_definitions.active =1
ORDER BY display_order ASC
Это работает только в том случае, если таблица B имеет нулевые строки или совпадает с строками для user_id в предложении WHERE. Если в таблице B есть строки с совпадающим field_id, но не user_id, я получаю ноль возвращаемых строк.
По существу, если для пользователя X существуют строки в таблице B, запрос больше не возвращает строки из таблицы A при поиске ответов пользователя Z, и ни один из них не найден.
Мне нужно, чтобы результат всегда содержал строки из таблицы A, даже если в B нет подходящих строк с правильным user_id.