我正在尝试返回位于特定状态下已租借特定影片的客户数量,其中租借表包含两列,一列用于客户ID,另一列用于电影ID。该函数接受电影ID和状态,并返回一个包含客户数量的整数。
现在我有一个实现,但它会计算整个查询返回的行数:
SELECT COUNT(*) as numCustomers FROM CUSTOMER C, RENTS R WHERE C.ST = '" + state + "' AND R.mid = " + movieID
然后我计算行数。我想能够检查numCustomers的正确数据。谢谢!
答案 0 :(得分: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
答案 1 :(得分: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注入攻击。
答案 2 :(得分: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