#mysql #sql
#mysql #sql
Вопрос:
У меня есть эти две таблицы
facilities
---- -------------------------------------- -------------- ------- ------ ------------ ------------
| id | name | category | image | cust | created_at | updated_at |
---- -------------------------------------- -------------- ------- ------ ------------ ------------
| 1 | Bar | hotel | | | NULL | NULL |
| 2 | Minibar in alle Zimmer | hotel | | | NULL | NULL |
| 3 | Snack restaurant | hotel | | | NULL | NULL |
| 4 | Grillroom | hotel | | | NULL | NULL |
---- -------------------------------------- -------------- ------- ------ ------------ ------------
таблица — 2
resortfacilities
---- ------ --------------------- --------------------- ------
| id | f_id | created_at | updated_at | h_id |
---- ------ --------------------- --------------------- ------
| 42 | 4 | 2016-09-21 13:17:27 | 2016-09-21 13:17:27 | 35 |
| 59 | 1 | 2016-09-22 10:23:27 | 2016-09-22 10:23:27 | 38 |
| 60 | 4 | NULL | NULL | 38 |
---- ------ --------------------- --------------------- ------
И я запустил следующий sql
SELECT
facilities.id,
facilities.`name`,
facilities.image,
resortfacilities.h_id
FROM
facilities
LEFT JOIN resortfacilities ON facilities.id = resortfacilities.f_id
WHERE
resortfacilities.f_id IS NULL AND
facilities.category = 'hotel' OR
resortfacilities.h_id <> 35
с ожиданием get получаем следующий результат
---- --------------------------- ------- ------
| id | name | image | h_id |
---- --------------------------- ------- ------
| 4 | Grillroom | | 38 |
| 2 | Minibar in alle Zimmer | | NULL |
| 3 | Snack restaurant | | NULL |
---- --------------------------- ------- ------
без значений, которые принадлежат h_id 35
, но в итоге я получаю
---- --------------------------- ------- ------
| id | name | image | h_id |
---- --------------------------- ------- ------
| 1 | Bar | | 38 |
| 4 | Grillroom | | 38 |
| 2 | Minibar in alle Zimmer | | NULL |
| 3 | Snack restaurant | | NULL |
---- --------------------------- ------- ------
Могу ли я узнать, как получить этот результат?
Комментарии:
1. Попробуйте заключить выражение resortfacilities в квадратные скобки. f_id РАВНО НУЛЮ, А facilities.category = ‘отель’ ИЛИ resortfacilities . h_id <> 35
2. мне кажется, что ваши данные не нормализованы должным образом. Например, почему created_at встречается в обеих таблицах?
3. Скорее всего
WHERE facilities.category = 'hotel' AND ( resortfacilities.f_id IS NULL OR resortfacilities.h_id <> 35)
Ответ №1:
используйте приведенный ниже скрипт (для получения результата, как указано).
SELECT
f.id,
f.`name`,
f.image,
r.h_id
FROM
facilities f
LEFT JOIN resortfacilities r ON f.id = f.f_id AND r.h_id <> 35
WHERE f.category = 'hotel'
Комментарии:
1. Проверьте свои псевдонимы