Dois selects de uma só vez?!?!?!

11/05/2004

0

Olá,

Gostaria de saber se o MySQL executa dois comandos de uma só vez como por exemplo:

Select * from tabela

Select Campo from Tabela, Tabela2 where Tabela.Campo = Tabela2.Campo...

De uma vez só... numa query só, ou mesmo num front end!!!


Henriquem

Henriquem

Responder

Posts

11/05/2004

Kandrus

Acho q é isso que vc quer

Sub-Seleções(Sub-selects)

Atualmente o MySQL suporta somente sub seleções de um formulário INSERT ... SELECT ... e REPLACE ... SELECT .... Entretanto, você pode usar a função IN() em outros contextos.

Em alguns casos você pode reescrever a query sem uma sub seleção:

SELECT * FROM table1 WHERE id IN (SELECT id FROM table2);

Isto pode ser reescrito como:

SELECT table1.* FROM table1,table2 WHERE table1.id=table2.id;

As queries:

SELECT * FROM table1 WHERE id NOT IN (SELECT id FROM table2);
SELECT * FROM table1 WHERE NOT EXISTS (SELECT id FROM table2 where table1.id=table2.id);

Podem ser reescritas como:

SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id where table2.id IS NULL

Para subqueries mais complexas você pode às vezes criar tabelas temporárias para armazenar a subquery. Em alguns casos, entretanto, essa opção não irá funcionar. O mais frequentemente encontrado destes casos aparece em instruções DELETE, para o qual padrão SQL não suporta joins (exceto nas sub-queries. Para esta situação existem duas opções disponível até que subqueries sejam suportadas pelo MySQL.


Responder

12/05/2004

Henriquem

Na verdade... é mais ou menos isso!!!!

Mesmo no exemplo que vc deu :

SELECT * FROM table1 WHERE id IN (SELECT id FROM table2);

O meu mysql apresenta a seguinte mensagem:

vc tem um erro de sintaxe no seu SQL próximo a ´SELECT id FROM table2)´ na linha 1.

Claro que os nomes que aparecem são os das tabelas que usei do meu banco de dados.... mas enfim... com certeza vc deve conhecer o SQLServer... e com o SQLServer eu consigo dar dois selects de uma só vez, e no mysql, parece que ele não executa dois comandos de uma vez!!!! eu achei até que deveria usar algo como BEGIN, END, GO.. e mesmo assim nada!!!

Você sabe me dizer se isso é mesmo impossível, ou serão implementados nas próximas versões do MySQL?

Obrigado.

Henrique


Responder

12/05/2004

Ualex

Olha no Mysql vc consegue executar esse comando normalmente

use test;
select nome from clientes where codigo in(select codigo from clientes where codigo >2);


isso foi só um exemplo. Mas a versão que uso do Mysql é 4.x . Talvez seja que versão vc usa do mysql ?


Responder

13/05/2004

Henriquem

O MySQL que uso é o 4.0.17.... dá certo isso?

Eu li que o 4.1.1 ainda está pra base de desenvolvimento não pra produção... e essa versão possui vários comandos e funções novas... seria esse o problema, ou o problema está na peça que fica na frente do computador!?

Abraço.


Responder

13/05/2004

Kandrus

Vc deve montar a instrução SQL assim:

SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id where table2.id IS NULL

e não da outra maneira


Responder

14/05/2004

Ualex

olha na verdade o mysql tem suporte para junção de tabela e apartir do mysql 4.x suporte a subquery . junção de tabela e subquery são coisas
diferentes.

exemplo:

tabela a; (cod_a,nome)
tabela b; (cod_a,email)

vamos usar um join


select a.*,b.* from a left join b on a.cod_a = b.cod_a;


ele vai mostrar os registros de a que possuem correspondencia em b . e os registros em b que não existirem em a ele(mysql) colocara null.

tenta criar umas tabelas e ir testando.

tem um desafio na home que é sobre junção de tabela da uma olhada.

boa sorte :)


Responder

18/05/2004

Henriquem

Blz galera,

Valeu.


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar