Query returning the same amounts - sql oracle
I wonder if anyone can shed some light on the sql query I am working with,
I built this query:
SELECT SUM(TICKET_TYPE.PRICE) AS TOTALCINEMASALES, CINEMA.LOCATION, PERFORMANCE.PERFORMANCE_DATE
FROM RESERVATION, TICKET, TICKET_TYPE, CINEMA, PERFORMANCE
WHERE TICKET_TYPE.TICKET_TYPE_ID = TICKET.TICKET_TYPE_ID
AND TICKET.RESERVATION_ID = RESERVATION.RESERVATION_ID
AND RESERVATION.PERFORMANCE_ID = PERFORMANCE.PERFORMANCE_ID
AND CINEMA.LOCATION = 'SKIPTON'
AND PERFORMANCE.PERFORMANCE_DATE BETWEEN to_date('01/03/2009','DD/MM/yyyy') AND to_date('07/04/2009','DD/MM/yyyy')
GROUP BY
CINEMA.LOCATION, PERFORMANCE.PERFORMANCE_DATE
ORDER BY
TOTALCINEMASALES;
Every time I run it, it returns a set of sets of sums for each row for totalcinemasales, but I know there are different levels of ticket sales in the database, etc., it does this for every change I change, any pointers, how could I improve it?
thanks
0
joe
source
to share
2 answers
You forgot to join CINEMA, possibly with PERFORMANCE.
Guess:
AND CINEMA.CINEMA_ID = PERFORMANCE.CINEMA_ID
You can use ANSI joins when you get used to it, it is actually easier to read:
SELECT SUM(TICKET_TYPE.PRICE) AS TOTALCINEMASALES, CINEMA.LOCATION, PERFORMANCE.PERFORMANCE_DATE
FROM
TICKET
inner join TICKET_TYPE
on TICKET_TYPE.TICKET_TYPE_ID = TICKET.TICKET_TYPE_ID
inner join RESERVATION
on TICKET.RESERVATION_ID = RESERVATION.RESERVATION_ID
inner join PERFORMANCE
on RESERVATION.PERFORMANCE_ID = PERFORMANCE.PERFORMANCE_ID
inner join CINEMA /* the missing link */
on CINEMA.CINEMA_ID = PERFORMANCE.CINEMA_ID
WHERE
CINEMA.LOCATION = 'SKIPTON'
AND PERFORMANCE.PERFORMANCE_DATE BETWEEN to_date('01/03/2009','DD/MM/yyyy') AND to_date('07/04/2009','DD/MM/yyyy')
GROUP BY
CINEMA.LOCATION, PERFORMANCE.PERFORMANCE_DATE
ORDER BY
TOTALCINEMASALES;
+2
source to share
SELECT SUM(TICKET_TYPE.PRICE) AS TOTALCINEMASALES, CINEMA.LOCATION, PERFORMANCE.PERFORMANCE_DATE
FROM RESERVATION, TICKET, TICKET_TYPE, CINEMA, PERFORMANCE
WHERE TICKET_TYPE.TICKET_TYPE_ID = TICKET.TICKET_TYPE_ID
AND TICKET.RESERVATION_ID = RESERVATION.RESERVATION_ID
AND RESERVATION.PERFORMANCE_ID = PERFORMANCE.PERFORMANCE_ID
AND CINEMA.LOCATION = 'SKIPTON'
-- Added this
AND PERFORMANCE.CINEMA_ID = CINEMA.CINEMA_ID
--
AND PERFORMANCE.PERFORMANCE_DATE BETWEEN to_date('01/03/2009','DD/MM/yyyy') AND to_date('07/04/2009','DD/MM/yyyy')
GROUP BY
CINEMA.LOCATION, PERFORMANCE.PERFORMANCE_DATE
ORDER BY
TOTALCINEMASALES;
0
source to share