SQL의 여러 데이터베이스에서 Count ()를 선택하십시오
문제
특정 영화를 임대 한 특정 상태에 위치한 고객 수를 반환하려고 시도합니다. 여기서 임대료 테이블에는 두 개의 열이 포함되어 있으며 하나는 고객 ID와 영화 ID 용 열이 있습니다. 이 기능은 영화 ID와 상태를 가져 와서 고객의 양으로 정수를 반환합니다.
지금은 구현이 있지만 전체 쿼리가 반환하는 행의 양을 계산합니다.
SELECT COUNT(*) as numCustomers FROM CUSTOMER C, RENTS R WHERE C.ST = '" + state + "' AND R.mid = " + movieID
그리고 나는 행의 양을 계산합니다. 올바른 데이터를 확인하는 경우 NumCustomer를 확인하고 싶습니다. 감사!
해결책
첫째, CustomerID의 임대료 테이블과 고객 테이블을 연결하기위한 조항이 없습니까?
둘째, From Clause의 내부 조인 기능을 사용하여 두 테이블을 추가해야합니다.
셋째, 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
다른 팁
스키마에 대해 무언가를 추측합니다 (임대료가 고객과 관련된 방법) :
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 주사 공격을 조사해야합니다.
고객과 임대 테이블을 연결해야합니다. 그렇지 않으면 각 테이블의 모든 항목에 대한 항목이 표시됩니다.
어때요 :SELECT COUNT(C.ID) AS numCustomers
FROM CUSTOMER C, RENTS R
WHERE
C.ID = R.RenterID
AND
C.ST = '" + state + "'
AND
R.mid = " + movieID
제휴하지 않습니다 StackOverflow