Question

Je cherche à retourner le nombre de clients situés dans un état spécifique qui ont loué un film spécifique, où la table des loyers contient deux colonnes, une pour l'ID client et un pour l'ID de film. La fonction prend un ID de film et de l'état et retourne un entier avec la quantité de clients.

En ce moment j'ai une mise en œuvre, mais il compte le nombre de lignes de retour les entiers de la requête:

SELECT COUNT(*) as numCustomers FROM CUSTOMER C, RENTS R WHERE C.ST = '" + state + "' AND R.mid = " + movieID

Et puis je compte le nombre de lignes. Je voudrais simplement être en mesure de vérifier numCustomers pour les données correctes. Merci!

Était-ce utile?

La solution

Tout d'abord, vous manquez une clause de lier votre table et votre table LOYERS CLIENT sur CustomerId?

En second lieu, vous devez utiliser la fonctionnalité INNER JOIN dans la clause FROM d'ajouter vos deux tableaux.

Troisièmement, vous ne devriez pas construire votre sql comme une chaîne comme celui-ci que vous serez ouvert à injection SQL.

Lors d'une estimation, le genre de SQL vous pouvez être après est la suivante.

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

Autres conseils

Deviner quelque chose sur votre schéma (comment LOYERS se rapporte au client):

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
    )

En outre, vous devriez la recherche attaques par injection SQL, si vous n'êtes pas déjà familier avec ce sujet.

Vous devez vous connecter vos tables client et de location, sinon vous aurez une entrée pour chaque entrée dans chaque tableau.

Que diriez-vous: SELECT COUNT(C.ID) AS numCustomers FROM CUSTOMER C, RENTS R WHERE C.ID = R.RenterID AND C.ST = '" + state + "' R.mid = " + movieID <=>

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top