문제

특정 영화를 임대 한 특정 상태에 위치한 고객 수를 반환하려고 시도합니다. 여기서 임대료 테이블에는 두 개의 열이 포함되어 있으며 하나는 고객 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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top