SQL запрос, чтобы выбрать записи из MySQL - PullRequest
0 голосов
/ 02 июня 2019

Может предложить мне лучший способ выбрать записи из MySQL

customer
--------
id  bed_id  status
1   1       vocated     
2   1       booked
3   2       vocated

bed
-----
id  name
1   lower 
2   middle
3   upper

Мне нужно выбрать кровать, которая свободна или не отведена

Здесь ожидаемые результаты Пустая кровать должна быть: bed_id's = 2 и 3 Какой лучший SQL-запрос, чтобы получить такой результат

Ответы [ 4 ]

1 голос
/ 02 июня 2019

Соедините таблицы и сгруппируйте их по идентификатору кровати и поместите условия в предложение HAVING:

select b.id, b.name
from bed b left join customer c
on c.bed_id = b.id
group by b.id
having (
  sum(status = 'vacated') > 0
  and
  sum(status = 'booked') = 0
) or sum(status is null) > 0

Я не уверен, нужно ли вам and или or в условиях

0 голосов
/ 02 июня 2019

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

 select group_concat(s.t1id) availablerooms 
    from
    (
    select t1.id t1id,t1.name,t.id,t.bed_id,t.status
    from t1
    left join t on t1.id = t.bed_id 
    where t.id = (select max(id) from t where t1.id = t.bed_id) or
            t.id is null
    ) s
    where s.status <> 'booked' or s.status is null;

+----------------+
| availablerooms |
+----------------+
| 2,3            |
+----------------+
1 row in set (0.00 sec)
0 голосов
/ 02 июня 2019

Вы можете применить обратную логику с помощью not exists:

select *
  from bed b
 where not exists 
  (
   select bed_id
     from customer
    where status != 'vocated' and status = 'booked'
      and bed_id = b.id);

Демо

0 голосов
/ 02 июня 2019

Попробуйте это -

SELECT * FROM bed
WHERE ID NOT IN (
    SELECT DISTINCT bed_id FROM customer
    WHERE Status = 'booked'
)

Примечание: Это будет работать для ваших текущих данных.Но если я считаю практичным, вам нужно проверить последний статус BED в таблице клиентов.В этом случае вам нужно предоставить данные с большим разнообразием и более подробным объяснением ваших требований.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...