SQL Select из нескольких таблиц возвращает то, что доступно

0

У меня три таблицы, одна для пользователей, одна для изображений и одна, которая отображает изображения пользователям. Вот мой запрос (упрощенный):

"SELECT * FROM tb_users u, tb_images i, tb_mapimagestousers m
    WHERE
u.id = :userid
    AND
m.userid = u.id
    AND
i.id = m.imgid

Этот запрос будет возвращать штраф до тех пор, пока данные будут извлекаться из всех таблиц. Если нет изображения, назначенного пользователю, в них не будет записи для изображений или таблиц mapimagestousers, и запрос вернет пустой набор (понятно). Как я запрашиваю базу данных, чтобы в случае отсутствия назначенного изображения я все равно получал все, что я вытащил из таблицы пользователей?

Теги:
database
pdo
innodb

1 ответ

2
Лучший ответ

Никогда не используйте запятые в предложении FROM. Всегда используйте правильный, явный, стандартный синтаксис JOIN.

Тогда вы узнаете о внешних соединениях.

Ты хочешь:

SELECT *
FROM tb_users u LEFT JOIN
     tb_mapimagestousers miu
     ON miu.userid = u.id LEFT JOIN
     tb_images i
     ON miu.imgid = i.id
WHERE u.id = :userid;
  • 0
    Когда вы объединяете эти объединения вместе, обрабатывает ли он все результаты, возвращенные до одной таблицы? Так что, если бы я сделал несколько левых объединений, а затем правое, то это правое объединение обработало бы всю строку левых объединений как одну таблицу с точки зрения способа объединения результатов, верно?
  • 0
    И какая-то конкретная причина, почему бы не использовать запятые в предложении FROM ?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню