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)