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


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


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







All Articles