Selecione COUNT () de vários bancos de dados em SQL
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!
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