Подзапрос возвращает более 1 строки | Можно ли использовать «И НЕ В»? - PullRequest
0 голосов
/ 05 мая 2018
SELECT r.rom_ID
    FROM rom r
    WHERE r.rom_ID NOT LIKE(

    SELECT r.rom_ID
    FROM rom r, booking b 
    WHERE b.rom_ID = r.rom_ID 
    and (
         '2018-05-08' BETWEEN b.ankomstdato AND b.utsjekkdato OR
             '2018-05-12' BETWEEN b.ankomstdato AND b.utsjekkdato OR 
             ('2018-05-08' <= b.ankomstdato AND  '2018-05-12' >= b.utsjekkdato
        ) ) )  AND r.romtype_ID = 2
        LIMIT 1;

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Я предполагаю, что вы хотите запросить бесплатную комнату в течение периода типа 2. Это будет выглядеть так:

SELECT r.rom_ID
FROM rom r
WHERE NOT EXISTS (SELECT 1
                  FROM booking b
                  WHERE b.utsjekkdato > '2018-05-08' AND
                        b.ankomstdato < '2018-05-12'
                 ) AND
      r.romtype_ID = 2
LIMIT 1;

Обратите внимание, что строгие неравенства могут быть <= и / или >= в зависимости от того, что на самом деле означает доступность.

0 голосов
/ 05 мая 2018

Вы можете использовать НЕ В И избегайте использования неявного соединения ... используйте явное соединение, например: INNER JOIN

SELECT r.rom_ID
FROM rom r
WHERE r.rom_ID NOT IN (

SELECT r.rom_ID
FROM rom r
INNER JOIN  booking b  ON b.rom_ID = r.rom_ID 
and (
     '2018-05-08' BETWEEN b.ankomstdato AND b.utsjekkdato OR
         '2018-05-12' BETWEEN b.ankomstdato AND b.utsjekkdato OR 
         ('2018-05-08' <= b.ankomstdato AND  '2018-05-12' >= b.utsjekkdato
    ) ) )  AND r.romtype_ID = 2
    LIMIT 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...