2009-03-23 18 views
3

特定の映画をレンタルした特定の州に所在する顧客の数を返すようにしています。そこには、顧客IDとムービーの2つの列ID。この関数は、ムービーIDと状態を取り込み、顧客数に応じた整数を返します。SQLの複数のデータベースからCOUNT()を選択

今、私は実装を持っているが、それは、行の量クエリ全体のリターンをカウントアップ:

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

そして私は、行の量をカウントします。私はnumCustomersが正しいデータをチェックできるようにしたいと思います。ありがとう!

答えて

8

まず、CustomerIdにRENTSテーブルとCUSTOMERテーブルをリンクする句がありませんか?

第2に、FROM句のINNER JOIN機能を使用して2つのテーブルを追加する必要があります。

第3に、SQLインジェクションが開かれるようにsqlをこのような文字列として構築しないでください。

次のようなSQLの種類は次のとおりです。

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

(賃料が顧客にどのように関連するか)スキーマについて何かを推測:あなたはすでにその対象に慣れていない場合

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 
    ) 

また、あなたは、SQLインジェクション攻撃を研究しなければなりません。

0

お客様とレンタルテーブルを接続する必要があります。それ以外の場合は、各テーブルのすべてのエントリのエントリが表示されます。

方法について: SELECT COUNT(C.ID) AS numCustomers FROM CUSTOMER C, RENTS R WHERE C.ID = R.RenterID AND C.ST = '" + state + "' AND R.mid = " + movieID

関連する問題