Shakinet 0 Denunciar post Postado Maio 8, 2008 Olá a todos! Estou fazendo um trabalho para a requisição de material. Tenho três tabelas no mysql (as que interessam para o momento): material (tabela para o material) id_material marca modelo id_sala id_categoria observacoes requisicoes (tabela para registar as requisições) id_requisicao id_material requisitante data1 hora1 id_sala estado devolucoes (tabela para registar as devoluções do material) id_devolucao id_requisicao data hora devolutivo Agora, quando vou requisitar um material, pretendo uma list-box onde aparecem os materiais disponiveis, ou seja, os que não estão requisitados. Para tal fiz este select: "SELECT material.id_material AS 'id_material2', material.marca, material.modelo, requisicoes.id_material FROM material, requisicoes WHERE material.id_material <> requisicoes.id_material" Necessito da marca e do modelo do material para mostrar na list-box e do id do mesmo para depois poder mandar para a requisição. A verdade é que este não está funcionando correctamente.... Pois na list-box está a aparecer os dois materiais que podem sser requisitados e o que está requisitado duas vezes..... e só deveria aparecer os dois que não estão requisitados. Alguém me pode ajudar? É mesmo urgente... já tentei de várias maneiras e penso que a meu ver está bem escrito o SELECT... mas não percebo porque não funciona correctamente. :unsure: Compartilhar este post Link para o post Compartilhar em outros sites
Paulo Caesar 0 Denunciar post Postado Maio 9, 2008 SELECT DISTINCT material.id_material AS 'id_material2', material.marca, material.modelo, requisicoes.id_material FROM material INNER JOIN requisicoes ON requisicoes.id_material IS NOT NULL WHERE material.id_material NOT IN (SELECT requisicoes.id_material FROM requisicoes) O distinct deve te ajudar a se livrar dos duplicados. Agora, você pode ter uma queda no rendimento dessa query, se a tabela requisições tiver muitos dados, porque a cada linha da tabela material, vai ser feito um sub SELECT na tabela requisicoes afim de comparar se o id do material está lá. O INNER JOIN vai garantir que só os dados que não forem NULL entraram no SELECT, mas acho que nem precisa pra falar a verdade Vê aí como fica e me fala Compartilhar este post Link para o post Compartilhar em outros sites
NaPraia 12 Denunciar post Postado Maio 9, 2008 seguinte, os materiais que estão na tabela devoluções devem aparecer na consulta? se não select id_material, marca, modelo, id_sala, id_categoria from material where id_material not in (select id_material from requisicoes) and id_material not in (select id_material from devolucoes) se sim select a.id_material, marca, modelo, id_sala, id_categoria from material a, devolucoes b where a.id_material = b.material and id_material not in (select id_material from requisicoes) Compartilhar este post Link para o post Compartilhar em outros sites