3

特定の映画をレンタルした特定の州にいる顧客の数を返そうとしています。ここで、rents テーブルには、顧客 ID 用と映画 ID 用の 2 つの列が含まれています。この関数は映画 ID と州を受け取り、顧客の数を示す整数を返します。

今、私は実装を持っていますが、クエリ全体が返す行の量を数えます:

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

そして、行数を数えます。numCustomers で正しいデータを確認できるようにしたいと思います。ありがとう!

4

3 に答える 3

8

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

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

第三に、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
于 2009-03-23T19:46:29.820 に答える
1

スキーマについて何かを推測する(RENTSとCUSTOMERの関係):

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インジェクション攻撃にまだ精通していない場合は、SQLインジェクション攻撃を調査する必要があります。

于 2009-03-23T19:52:39.133 に答える
0

Customer テーブルと Rental テーブルを接続する必要があります。そうしないと、各テーブルのすべてのエントリのエントリが取得されます。

どうですか: SELECT COUNT(C.ID) AS numCustomers FROM CUSTOMER C, RENTS R WHERE C.ID = R.RenterID AND C.ST = '" + state + "' AND R.mid = " + movieID

于 2009-03-23T19:57:27.297 に答える