Dois selects de uma só vez?!?!?!
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!!!
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
Curtidas 0
Respostas
Kandrus
11/05/2004
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.
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.
GOSTEI 0
Henriquem
11/05/2004
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
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
GOSTEI 0
Ualex
11/05/2004
Olha no Mysql vc consegue executar esse comando normalmente
isso foi só um exemplo. Mas a versão que uso do Mysql é 4.x . Talvez seja que versão vc usa do mysql ?
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 ?
GOSTEI 0
Henriquem
11/05/2004
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.
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.
GOSTEI 0
Kandrus
11/05/2004
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
SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id where table2.id IS NULL
e não da outra maneira
GOSTEI 0
Ualex
11/05/2004
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 :)
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 :)
GOSTEI 0
Henriquem
11/05/2004
Blz galera,
Valeu.
Valeu.
GOSTEI 0