Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Duvida INNER JOIN

select * from tabela12 where (select b.id from tabela1 a inner join tabela2 b on a.id_r = b.fk_id where a.dt > sysdate-1) = tabela12.fk_id;

galera fiz esse inner join e da um erro "a subconsulta de uma única linha retorna mais de uma linha" É a subconsulta no caso essa :

"select b.id from tabela1 a inner join tabela2 b on a.id_r = b.fk_id where a.dt > sysdate-1"

retorna 5 valores ​porem eu queria ver se algum desses valores e igual o valor tabela12.fk_id. tem como fazer isso ? eu sei que se ele retornar 1 valor ele vai comparar correto, so que quando ele retornando 5 valores não da porem eu precisava :( tem como fazer isso ?

4 respostas

Olá,

Existem algumas formas de fazer isso, utilizando HAVING é uma delas, eu vou colocar uma query abaixo, dá uma testada, mas é sempre mais difícil quando não tenho acesso ao modelo de dados:

SELECT * 
FROM tabela12
HAVING
    (SELECT 1 
    FROM tabela1 a INNER JOIN tabela2 b ON a.id_r = b.fk_id 
    WHERE a.dt > sysdate-1 AND b.id = tabela12.fk_id)

Abs!

Obrigado Bruno por responder porem não deu certo vou tentar explicar melhor nesse select:

select b.id from tabela1 a inner join tabela2 b on a.id_r = b.fk_id where a.dt > sysdate-1 ---- esse selet retorna 5 valores = 5 ,13,11,22,25

quero ver se esse algum desses resultado e "=" ao tabela12.fk_id que no caso o valor e 11 , si for igual mostra tudo(*) que tem no 11

Teste essa:

SELECT * 
FROM tabela12
WHERE tabela12.fk_id IN
    (SELECT b.id
    FROM tabela1 a INNER JOIN tabela2 b ON a.id_r = b.fk_id 
    WHERE a.dt > sysdate-1)

Abs!

solução!

Bruno Bom Dia seu código não funcionou porem ele me inspirou em fazer o reverso e deu certo... muito obrigado

SELECT b.id
FROM tabela1 a INNER JOIN tabela2 b ON a.id_r = b.fk_id 
WHERE a.dt > sysdate-1
in
(select * from tabela12);