2009-03-23 6 views
3

Je tente de renvoyer 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 une pour le film ID. La fonction prend un ID de film et l'état et renvoie un nombre entier avec le nombre de clients.Sélectionnez COUNT() à partir de plusieurs bases de données dans SQL

En ce moment, j'ai une mise en œuvre, mais il compte le nombre de lignes de l'ensemble requête renvoie:

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 pouvoir vérifier numCustomers pour les données correctes. Merci!

Répondre

8

Premièrement, il vous manque une clause pour lier votre table RENTS et votre table CLIENT sur CustomerId? Deuxièmement, vous devez utiliser la fonctionnalité INNER JOIN dans la clause FROM pour ajouter vos deux tables. Troisièmement, vous ne devez pas construire votre SQL comme une chaîne comme celle-ci car vous serez ouvert à SQL Injection. En guise d'estimation, le type de SQL que vous pourriez avoir après est le suivant.

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 
1

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.

0

Vous devez connecter vos tables Customer et Rental sinon vous obtiendrez une entrée pour chaque entrée de chaque table.

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

Questions connexes