Получить все результаты из первой таблицы в соединении MySQL

0

У меня две таблицы. Мне нужно выбрать все строки (только одно условие hotel_id = 2) из первой таблицы и выбранных строк (на основе условия) из 2-й таблицы. Но я использую левое соединение, чтобы получить только данные из второй таблицы.

запрос

 SELECT R.name room_name,
        R.id room_id,
        UD.discount 
   FROM user_discounts UD 
   LEFT 
   JOIN rooms R 
     ON R.id = UD.room_id
  WHERE UD.user_id = 1482
    AND UD.hotel_id = 2

Мне нужно показать все комнаты, но теперь показывает общее в двух таблицах.

Теги:

2 ответа

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

Обратные связи между таблицами, если вы хотите, чтобы все номера

SELECT 'R'.'name' as 'room_name', 'R'.'id' as 'room_id', 'UD'.'discount' as 'discount'
FROM  'rooms' as 'R'
LEFT JOIN 'user_discounts' as 'UD' ON 'R'.'id'= 'UD'.'room_id'
             AND'UD'.'user_id' = '1482'
             AND 'UD'.'hotel_id' = '2'

Но вам также нужно будет изменить предложение where. Вместо исходного предложения where они могут использоваться как часть условий соединения.

Эффект предложения where может быть легко упущен, но если вы ссылаетесь на левую объединенную таблицу в предложении where, вы также должны указывать, что данные из этой таблицы равны NULL. например

SELECT 'R'.'name' as 'room_name', 'R'.'id' as 'room_id', 'UD'.'discount' as 'discount'
FROM  'rooms' as 'R'
LEFT JOIN 'user_discounts' as 'UD' ON 'R'.'id'= 'UD'.'room_id'
WHERE ('UD'.'user_id' = '1482'
   AND 'UD'.'hotel_id' = '2'
      )
   OR 'UD'.'room_id' IS NULL

Если в столовых есть hotel_id, то:

SELECT 'R'.'name' as 'room_name', 'R'.'id' as 'room_id', 'UD'.'discount' as 'discount'
FROM  'rooms' as 'R'
LEFT JOIN 'user_discounts' as 'UD' ON 'R'.'id'= 'UD'.'room_id'
             AND'UD'.'user_id' = '1482'
             AND 'UD'.'hotel_id' = 'R'.'hotel_id'
WHERE 'R'.'hotel_id' = 2
  • 0
    спасибо. 3-й человек для меня
  • 0
    Спасибо, слово LEFT помогло мне!
3

Насколько я понимаю, вам нужны все данные из первой таблицы и только из второй таблицы, которая соответствует вашим критериям.

 SELECT 'R'.'name' as 'room_name', 'R'.'id' as 'room_id', 'UD'.'discount' as 'discount'
 FROM 'rooms' as 'R'
 LEFT JOIN 'user_discounts' as 'UD'  ON 'R'.'id'= 'UD'.'room_id'
 AND 'UD'.'user_id' = '1482'
 AND 'UD'.'hotel_id' = '2'

В соответствии с вашим запросом, where часть поворачивается налево, присоединяется к внутреннему соединению, поэтому вы не получите все строки из первой таблицы. Чтобы решить эту проблему, переместите фильтры для второй таблицы в on, поэтому только те записи, которые соответствуют критериям, будут вернулся со второй таблицы

  • 1
    Я никогда не понижаю любую помощь. Мне нужно проверить hotel_id = 2 в первой таблице.
  • 0
    @robins У вашей таблицы rooms есть столбец hotel_id если это так, добавьте where r.hotel_id = 2 если вы используете ud.hotel_id тогда вы снова получите только номера, которые соответствуют этим критериям
Показать ещё 3 комментария

Ещё вопросы

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