Ir para conteúdo

POWERED BY:

Arquivado

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

paulojuchem

Select

Recommended Posts

CREATE TABLE caixa (id INT(11) NOT NULL AUTO_INCREMENT , cliente INT(11) NOT NULL , PRIMARY KEY(id)) ENGINE=InnoDB;

CREATE TABLE despesas (id INT(11) NOT NULL AUTO_INCREMENT , produto INT(11) NOT NULL , PRIMARY KEY(id)) ENGINE=InnoDB;

CREATE TABLE caixaHasDespesas (caixa INT(11) NOT NULL , despesa INT(11) NOT NULL, PRIMARY KEY(caixa,despesa) ENGINE=InnoDB;

 

ok, a tabela caixaHasDespesas liga as dias, sendo que um caixa pode ter varias despesas. Quando eu vou adicionar uma despesa para um caixa, eu preciso dar select somente nas despesas que nao estao pagas ainda, entao, preciso selecionar da tabela despesas somente os valores que nao estiverem contidos na tabela caixaHasDespesas.

Eu sei que o seguinte select nao faz muito sentido, mas apenas para esclarecer, eu preciso do contrario dele, ou um NOT.

SELECT d.id, d.produto FROM despesas d RIGHT JOIN caixaHasDespesas h ON d.id=h.despesa;

Isso ai retorna somente o resultado duplicado, entao a negacao disto serviria.

Alguma luz?

Obs. As tabelas nao sao exatamente essas, mas a ideia e a mesma.

Compartilhar este post


Link para o post
Compartilhar em outros sites

CREATE TABLE caixa (id INT(11) NOT NULL AUTO_INCREMENT , cliente INT(11) NOT NULL , PRIMARY KEY(id)) ENGINE=InnoDB;

CREATE TABLE despesas (id INT(11) NOT NULL AUTO_INCREMENT , produto INT(11) NOT NULL , PRIMARY KEY(id)) ENGINE=InnoDB;

CREATE TABLE caixaHasDespesas (caixa INT(11) NOT NULL , despesa INT(11) NOT NULL, PRIMARY KEY(caixa,despesa) ENGINE=InnoDB;

 

ok, a tabela caixaHasDespesas liga as dias, sendo que um caixa pode ter varias despesas. Quando eu vou adicionar uma despesa para um caixa, eu preciso dar select somente nas despesas que nao estao pagas ainda, entao, preciso selecionar da tabela despesas somente os valores que nao estiverem contidos na tabela caixaHasDespesas.

Eu sei que o seguinte select nao faz muito sentido, mas apenas para esclarecer, eu preciso do contrario dele, ou um NOT.

SELECT d.id, d.produto FROM despesas d RIGHT JOIN caixaHasDespesas h ON d.id=h.despesa;

Isso ai retorna somente o resultado duplicado, entao a negacao disto serviria.

Alguma luz?

Obs. As tabelas nao sao exatamente essas, mas a ideia e a mesma.

 

2 horinhas no google, consegui uma solucao, aparentemente funciona como o esperado:

SELECT d.id , d.produto FROM despesas d WHERE d.id NOT IN (SELECT h.despesa FROM caixaHasDespesas WHERE h.despesa=d.id);

 

Porem, no mesmo site diz que o tal do UNION ALL e melhor, por executar mais rapido, mas eu nao entendi como ele usa o mesmo. Any help?

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.