Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Valores que se encontram em uma tabela e não na outra


MLeandroJr!
 Share

Question

Pessoal, me surgiu uma dúvida aqui sobre algo que nunca precisei fazer desta maneira.

Eu geralmente resolveria isso com duas consultas, mas hoje quero resolver com uma só.

O negócio é o seguinte, eu quero imprimir tudo o que contiver em uma tabela e não na outra.

Pra simplificar, imaginem duas tabelas:

  • foo
  • bar
Dentro delas possui a field id.

Quero que quando uma id existir em foo e não existir em bar, seja impresso na página.

Em teoria, o que preciso é:

SELECT id FROM foo WHERE NOT EXISTS (SELECT * FROM bar WHERE id=1)

Mas esse id=1 do bar não pose ser estático, ele tem que ser um valor vindo do field id do foo, compreendem?

Como procedo com isso?

Link to comment
Share on other sites

7 answers to this question

Recommended Posts

  • 0

fiz um teste

tenta assim amor

Ai está o código completo com o teste

CREATE DATABASE M;
use m;

CREATE TABLE foo(
    id int,
    nome varchar(40)  primary key,
    idade int,
    algumacoisa varchar(40)
);

CREATE TABLE bar(
    id int ,
    nome varchar(40) primary key
);

drop table bar;

SELECT * FROM foo;
SELECT * FROM bar;


SELECT id, nome FROM foo WHERE id=1;

DELIMITER $$

CREATE PROCEDURE busca(IN item varchar(50))
    begin
        declare x int default (SELECT id FROM foo WHERE nome = item);
        
        SELECT * FROM bar WHERE NOT id = x;
        
    end
$$


drop procedure busca$$

call busca('nome')$$

Edited by Thelon
Link to comment
Share on other sites

  • 0

DELIMITER $$

CREATE PROCEDURE busca(IN id_dos_truta int(10), IN regiaoid int(10))
    begin
        //consulta
    end
$$
 call busca($id, $regiao);
Ai depois você pode usar WHERE regiao_id = regiaoid no where vai o valor recebido na procedure manjo? Aqueles valores que estão dentro do parenteses também são variaveis que podem ser usadas na procedure elas ficam com o valor passado no call é igual função de JavaScript
function lol(algumacoisa){
  alert(algumacoisa);
}

lol("Gabriel");

tendeu?

Ele da o alart com Gabriel

a procedure funciona do mesmo jeito

Edited by Thelon
Link to comment
Share on other sites

  • 0

O caminho ainda não é este.

Preciso que ele busque somente os valores que possuem em uma tabela e não possuem na outra.

A procedure da forma que está lá em cima não fará isso.

Obs.: No meu MySQL eu precisei voltar o DELIMITER pra ; no fim da instrução, aí ele aceitou a procedure na boa.

Pensei em algo assim, mas não funcionou:

DELIMITER $$
CREATE PROCEDURE busca(IN regiaoid int(10))
    begin declare x int default (SELECT login_id FROM de_login WHERE login_ativo = 'S' AND regiao_id = regiaoid);

        SELECT * FROM de_login WHERE login_id = x AND login_ativo = 'S' AND regiao_id = regiaoid AND NOT EXISTS (SELECT login_id FROM de_mais_dados_candidato WHERE login_id = x);

    end $$
DELIMITER ;

Ele diz que a subquery retornou mais de um resultado, o que é estranho, pois da forma que está escrito deveria retornar um resultado só pra cada query.

Ou estou errado?

#1242 - Subquery returns more than 1 row
Link to comment
Share on other sites

  • 0
Tenta assim:

select dl.*
from de_login dl
left outer join de_mais_dados_candidato dmdc
on dmdc.login_id = dl.login_id
where dmdc.login_id is null
Ok. Mas melhore forçando a leitura da esquerda para a direita assim:
select STRAIGHT_JOIN dl.*
from de_login dl
left outer join de_mais_dados_candidato dmdc
on dmdc.login_id = dl.login_id
where dmdc.login_id is null

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...