Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

LaísaFCardoso

utilização IN

Recommended Posts

Olá Boa tarde!

 

Estou fazendo a seguinte query:

SELECT e.* FROM accounts ac
INNER JOIN email_addr_bean_rel eabr ON eabr.bean_id = ac.id
INNER JOIN emails_email_addr_rel eear ON eear.email_address_id = eabr.email_address_id
INNER JOIN emails e ON e.id = eear.email_id
WHERE ac.assigned_user_id IN ('5dafa35f-4ac6-8b6c-dd79-5277da070526', '1a6ca742-5dfb-4224-a346-501c2bf15be5') 
AND eabr.deleted = 0 
AND e.assigned_user_id IN ('5dafa35f-4ac6-8b6c-dd79-5277da070526', '1a6ca742-5dfb-4224-a346-501c2bf15be5')

Onde '5dafa35f-4ac6-8b6c-dd79-5277da070526', '1a6ca742-5dfb-4224-a346-501c2bf15be5' são os id dos usuários. Essa query retorna 6325 linhas.

 

Se eu fizer o mesmo select só que individualmente como por exemplo:

SELECT e.* FROM accounts ac
INNER JOIN email_addr_bean_rel eabr ON eabr.bean_id = ac.id
INNER JOIN emails_email_addr_rel eear ON eear.email_address_id = eabr.email_address_id
INNER JOIN emails e ON e.id = eear.email_id
WHERE ac.assigned_user_id = '5dafa35f-4ac6-8b6c-dd79-5277da070526'
AND eabr.deleted = 0 
AND e.assigned_user_id = '5dafa35f-4ac6-8b6c-dd79-5277da070526'

Para o ID '5dafa35f-4ac6-8b6c-dd79-5277da070526' eu tenho o retorno de 526 linhas

SELECT e.* FROM accounts ac
INNER JOIN email_addr_bean_rel eabr ON eabr.bean_id = ac.id
INNER JOIN emails_email_addr_rel eear ON eear.email_address_id = eabr.email_address_id
INNER JOIN emails e ON e.id = eear.email_id
WHERE ac.assigned_user_id = '1a6ca742-5dfb-4224-a346-501c2bf15be5'
AND eabr.deleted = 0 
AND e.assigned_user_id = '1a6ca742-5dfb-4224-a346-501c2bf15be5'

e para o id = '1a6ca742-5dfb-4224-a346-501c2bf15be5' o retorno de linhas é de 3583

 

Sendo assim, a soma do retorno de linha feito individualmente (526 + 3583) é de: 4109

 

Porque quando eu faço a query usando IN o retorno de linha é de 6325?

Os valores não teriam que ser iguais?

 

Qual é o problema na minha lógica aqui?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A busca está sendo feita em duas colunas diferentes cada uma de uma tabela , a primeira é um "in" em ambas e as demais feitas de forma separada , pode ser isto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Laisa, tudo bem?

WHERE ac.assigned_user_id IN ('5dafa35f-4ac6-8b6c-dd79-5277da070526', '1a6ca742-5dfb-4224-a346-501c2bf15be5')
AND eabr.deleted = 0 
AND e.assigned_user_id IN ('5dafa35f-4ac6-8b6c-dd79-5277da070526', '1a6ca742-5dfb-4224-a346-501c2bf15be5')

internamente pro banco é o mesmo que:

WHERE 
(
ac.assigned_user_id = '5dafa35f-4ac6-8b6c-dd79-5277da070526'
or 
ac.assigned_user_id ='1a6ca742-5dfb-4224-a346-501c2bf15be5'
)
AND eabr.deleted = 0 
AND 
(
e.assigned_user_id = '5dafa35f-4ac6-8b6c-dd79-5277da070526', 
or 
e.assigned_user_id = '1a6ca742-5dfb-4224-a346-501c2bf15be5'
)

entao como vc nao tem em nenhum lugar que

e.assigned_user_id = ac.assigned_user_id

ele vai fazer alguns produtos cartesianos, se tivesse resolveria :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Laisa, tudo bem?

WHERE ac.assigned_user_id IN ('5dafa35f-4ac6-8b6c-dd79-5277da070526', '1a6ca742-5dfb-4224-a346-501c2bf15be5')
AND eabr.deleted = 0 
AND e.assigned_user_id IN ('5dafa35f-4ac6-8b6c-dd79-5277da070526', '1a6ca742-5dfb-4224-a346-501c2bf15be5')

internamente pro banco é o mesmo que:

WHERE 
(
ac.assigned_user_id = '5dafa35f-4ac6-8b6c-dd79-5277da070526'
or 
ac.assigned_user_id ='1a6ca742-5dfb-4224-a346-501c2bf15be5'
)
AND eabr.deleted = 0 
AND 
(
e.assigned_user_id = '5dafa35f-4ac6-8b6c-dd79-5277da070526', 
or 
e.assigned_user_id = '1a6ca742-5dfb-4224-a346-501c2bf15be5'
)

entao como você nao tem em nenhum lugar que

e.assigned_user_id = ac.assigned_user_id

ele vai fazer alguns produtos cartesianos, se tivesse resolveria :)

 

Realmente isso resolve. Muito obrigada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.