Pergunta

Eu estou tentando retornar o número de clientes, localizados em um estado específico que ter alugado um filme específico, onde a mesa de rendas contém duas colunas, uma para identificação do cliente e um para o ID filme. A função leva em um ID filme e do estado e retorna um inteiro com a quantidade de clientes.

Agora eu tenho uma implementação, mas conta-se a quantidade de linhas inteiras a consulta retorna:

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

E então eu contar a quantidade de linhas. Gostaria de apenas ser capaz de verificar numCustomers para os dados corretos. Obrigado!

Foi útil?

Solução

Em primeiro lugar, você está faltando uma cláusula de vincular sua mesa de rendas e sua tabela de clientes em CustomerId?

Em segundo lugar, você deve usar o INNER JOIN funcionalidade na cláusula FROM para adicionar suas duas tabelas.

Em terceiro lugar, você não deve construir o seu sql como uma string assim como você vai estar aberto a SQL Injection.

Em uma suposição, o tipo de SQL você pode ser depois é o seguinte.

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

Outras dicas

Adivinhar algo sobre o seu esquema (como ALUGA refere a CLIENTE):

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
    )

Além disso, você deve pesquisar ataques de injeção SQL, se você não estiver familiarizado com esse assunto.

Você tem que ligar o seu cliente e mesas de aluguer de outra forma você vai ter uma entrada para cada entrada em cada tabela.

Como sobre: SELECT COUNT(C.ID) AS numCustomers FROM CUSTOMER C, RENTS R WHERE C.ID = R.RenterID AND C.ST = '" + state + "' AND R.mid = " + movieID

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top