Selezionare COUNT () da più database in SQL
Domanda
Sto tentando di restituire il numero di clienti che si trovano in uno stato specifico che hanno noleggiato un film specifico, dove il tavolo affitti contiene due colonne, una per ID cliente e uno per l'ID di film. La funzione prende in un ID di film e lo stato e restituisce un intero con la quantità di clienti.
In questo momento ho un'implementazione, ma conta la quantità di righe l'intero restituisce la query:
SELECT COUNT(*) as numCustomers FROM CUSTOMER C, RENTS R WHERE C.ST = '" + state + "' AND R.mid = " + movieID
E poi io reputo la quantità di righe. Vorrei solo essere in grado di controllare numCustomers per i dati corretti. Grazie!
Soluzione
In primo luogo, vi manca una clausola per collegare il tuo tavolo affitti e il vostro tavolo cliente su CustomerId?
In secondo luogo, è necessario utilizzare l'INNER JOIN funzionalità nella clausola FROM per aggiungere i due tabelle.
In terzo luogo, si dovrebbe costruire la vostra NON SQL come una stringa come questa come si sarà aperto a SQL Injection.
A occhio e croce, il tipo di SQL si può essere dopo è la seguente.
DECLARE @movieId int
DECLARE @state varchar(2)
SET @movieId = 12345
SET @state = 'NY'
SELECT
COUNT(DISTINCT C.CustomerID) as numCustomers
FROM
CUSTOMER C
INNER JOIN
RENTS R
ON
C.CustomerID = R.CustomerId
WHERE
C.ST = @state
AND
R.mid = @movieId
Altri suggerimenti
Indovinare qualcosa circa lo schema (come AFFITTI riferisce a CLIENTE):
SELECT COUNT(*) as numCustomers
FROM CUSTOMER c
WHERE
c.ST = @State
AND EXISTS
(
SELECT *
FROM RENTS r
WHERE r.CustomerID = c.CustomerID
AND r.mid = @movieID
)
Inoltre, si dovrebbe ricerca attacchi di SQL injection, se non sei già familiarità con questo argomento.
È necessario collegare il Cliente e le tabelle di noleggio altrimenti si otterrà una voce per ogni voce ogni tabella.
Come su:
SELECT COUNT(C.ID) AS numCustomers
FROM CUSTOMER C, RENTS R
WHERE
C.ID = R.RenterID
AND
C.ST = '" + state + "'
R.mid = " + movieID
<=>