3

我正在尝试返回位于特定州且已租借特定电影的客户数量,其中,rents 表包含两列,一列用于客户 ID,另一列用于电影 ID。该函数接受电影 ID 和状态,并返回一个包含客户数量的整数。

现在我有一个实现,但它计算了整个查询返回的行数:

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

然后我计算行数。我希望能够检查 numCustomers 以获取正确的数据。谢谢!

4

3 回答 3

8

首先,您缺少一个子句来链接您的 RENTS 表和 CustomerId 上的 CUSTOMER 表?

其次,您应该使用 FROM 子句中的 INNER JOIN 功能来添加您的两个表。

第三,您不应该将您的 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 注入攻击。

于 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 回答