Oracle Sql сопоставляет дату столбца с ошибкой sysdate

Я пытаюсь сопоставить столбцы из разных таблиц, сопоставив их с сегодняшней датой, используя SYSDATE, Выходной результат фактически заполняет столбец даты сегодняшней датой во всех строках, а не только в одной строке, в которой фактически есть сегодняшняя дата.

SELECT building.building_code, 
    building.building_name, 
    room_booking.booking_date
FROM building,
     room_booking,
     dual
WHERE to_date(booking_date) = trunc(sysdate)

ВЫХОД ЭТО:

BUILDING_CODE BUILDING_NAME   BOOKING_DATE
------------- --------------- ------------
A             ARCADIA         <17-mar-13>  
B             BELIZE          <17-mar-13>  
C             CAMDEN          <17-mar-13>  
D             DENVER          <17-mar-13>  
E             EXETER          <17-mar-13>  
F             FORT PORTAL     <17-mar-13>  
G             GRAMPIAN        <17-mar-13>  
H             HELVITICA       <17-mar-13>  
I             INVICTA         <17-mar-13>  
J             JULIET          <17-mar-13>  

10 rows selected 

В результате должна быть только одна строка, так как в ней есть только 1 строка с сегодняшней датой. Где я ошибся?

1 ответ

Решение

Это потому, что вы не присоединяетесь к столам room_booking а также building, производя декартово произведение на нем.

SELECT 
    b.building_code, 
    b.building_name, 
    r.booking_date
FROM building b
        JOIN room_booking   r /* missing join condition here: ON r.building_code = b.building_code */
WHERE 
    TO_DATE(r.booking_date) = TRUNC(SYSDATE)
Другие вопросы по тегам