Dois selects de uma só vez?!?!?!
11/05/2004
0
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
Posts
11/05/2004
Kandrus
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.
12/05/2004
Henriquem
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
12/05/2004
Ualex
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 ?
13/05/2004
Henriquem
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.
13/05/2004
Kandrus
SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id where table2.id IS NULL
e não da outra maneira
14/05/2004
Ualex
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 :)
Clique aqui para fazer login e interagir na Comunidade :)