Wählen Sie COUNT () aus mehreren Datenbanken in SQL
Frage
Ich bin versucht, die Zahl der Kunden in einem bestimmten Zustand befindet zurückzukehren, die einen bestimmten Film ausgeliehen haben, wo die Mieten Tabelle zwei Spalten enthält, eine für Kunden-ID und eine für den Film-ID. Die Funktion nimmt in einer Film-ID und dem Zustand und gibt eine ganze Zahl mit der Menge der Kunden.
Im Moment habe ich eine Implementierung, aber es zählt die gesamte Abfrage gibt die Anzahl der Zeilen nach oben:
SELECT COUNT(*) as numCustomers FROM CUSTOMER C, RENTS R WHERE C.ST = '" + state + "' AND R.mid = " + movieID
Und dann zähle ich die Anzahl der Zeilen. Ich möchte nur in der Lage sein numCustomers für die korrekten Daten zu überprüfen. Dank!
Lösung
Zum einen fehlt Ihnen eine Klausel Ihre RENTS Tisch und Ihre CUSTOMER-Tabelle auf CustomerId verlinken?
Zweitens sollten Sie die INNER JOIN-Funktionalität in der FROM-Klausel verwenden, um Ihre beiden Tabellen hinzuzufügen.
Drittens sollten Sie nicht Ihre SQL als Zeichenfolge wie folgt bauen, wie Sie SQL-Injection geöffnet sein wird.
Bei einer Vermutung, die Art von SQL können Sie nachdem es wie folgt aus.
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
Andere Tipps
Erraten etwas über Ihr Schema (wie RENTS auf CUSTOMER bezieht):
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
)
Außerdem sollten Sie SQL-Injection-Angriffe erforschen, wenn Sie mit diesem Thema nicht vertraut sind.
Sie haben Ihre Kunden und Vermietung Tabellen verbinden sonst werden Sie einen Eintrag für jeden Eintrag in jeder Tabelle bekommen.
Wie wäre es:
SELECT COUNT(C.ID) AS numCustomers
FROM CUSTOMER C, RENTS R
WHERE
C.ID = R.RenterID
AND
C.ST = '" + state + "'
AND
R.mid = " + movieID