запрос для получения основного блока

#sql #oracle

#sql #Oracle

Вопрос:

У меня есть такой сценарий (я придумал его, чтобы он был похож на мой случай) есть парковка с 3 этажами, все люди, которых они хотят вывести на парковку, заблокированы 1 машиной, поэтому все люди пошли в магазин / торговый центр и сказали, какая машина блокируется позадиего, так, например, автомобиль 2 блокируется автомобилем 1, автомобиль 12 блокируется автомобилем 2, автомобиль 99 блокируется автомобилем 12 и так далее. итак, для этого простого примера автомобиль 1 блокирует все автомобили.

 car_number , blocking_car, floor
1              2            1
2              12           2
7              15           1
9              20           2
12             7            1
15             2            1
20             12           2
99             12           2

SELECT car_number , blocking_car, floor
   FROM parking_cars
START WITH id = 0
CONNECT BY blocking_car= car_number 
  

но это не дает машине 1 этаж 1

Комментарии:

1. Откуда id = 0 берется?

2. Ваш набор данных неполный? Нет машины 12.

3. @user9601310 я не знал, с чего начать, я добавил car 12, я забыл его добавить

4. Это приводит к циклу — 12 блоков 7, 7 блоков 15, 15 блоков 2, 2 блока 12!

Ответ №1:

Вы можете найти заблокированный автомобиль, используя not exists :

 select pc.*
from parking_cars pc
where not exists (select 1
                  from parking_cars pc2
                  where pc2.blocking_car = pc.car_number
                 ) and
      floor = 1;
  

Это приводит к тому, что автомобиль на этаже 1 не блокируется никаким другим автомобилем.

Вот скрипка db<> .