Ir para conteúdo

POWERED BY:

Arquivado

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

stview

1 linha para varias tabelas

Recommended Posts

Alguem pode me dizer pq o comando abaixo nao funciona?DELETE FROM t1,t2 WHERE t1.id=t2.id AND t1.id='1';Não entendo pq comandos de SELECT funcionam desta maneira mas de DELETE não.Eu preciso saber como eu deletar dados de 2 ou mais tabelas ao mesmo tempo?EX:Tenho 2 tabelas, t1 e t2.O id1 de t2 é igual ao id de t1;Quero deletar o registro de t2 com id=1 e todos os registros de t2 com id1=1 também ... com fazer isso com apenas um query?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tb achava ... até que resolvi procurar no manual e achei o seguinte:

 

Referência do manual

 

Que diz o seguinte:

"...

A idéia é que apenas linhas coincidentes da tabelas listadas antes de FROM ou antes da cláusula USING são deletadas. O efeito é que você pode deletar l;inhas de muitas tabelas ao mesmo tempo e também ter tabelas adicionais que são utilizadas para busca.

 

O .* depois do nome da tabela existe apenas para ser compatível com o Access:

 

DELETE t1,t2 FROM t1,t2,t3 WHERE t1.id=t2.id AND t2.id=t3.id

 

ou

 

DELETE FROM t1,t2 USING t1,t2,t3 WHERE t1.id=t2.id AND t2.id=t3.id

 

No cso acima nós deletamos linhas coincidente apenas na tabela t1 e t2

..."

 

O mais engraçado é que depois de tentar varias vezes o que eu queria, resolvi reproduzir o exemplo citado no manual, e nem assim funcionou ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Kara da uma olhada na versão do seu mysql essa modo de delete foi implementado na versão 4.0 e melhorado na versão 4.0.2 da uma olhada na versão que você está usando...abraçosMarcio

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poisé .. eu verifiquei é o MySQL 4.0.20-standard ...Ninguem ai nunca usou essa aplicação?Acho que tem algum detalhe na linha que esta errado, pq aparentemente a versão suporta ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ricardo vou dar uma olhada nesse seu problema ok...só estou meio corrido agora, mas prometo que olho...abraçosMarcio

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera vi essa matéria no http://sqlmagazine.com.br e achei legal por isso estou postando ela aqui...

acho que pode ser util a todos que trabalham com mysql...

 

abraços

 

marcio

Visualização de dados de maneira mais organizada

 

Como já sabemos, o comando SELECT é o responsável por fazer a exibição dos dados registrados em nossas tabelas, veremos agora como utilizar uma melhor aplicação deste recurso.

 

Exibição de linhas duplicadas

 

Para evitarmos que isso ocorra, devemos colocar a palavra DISTINCT imediatamente após o comando SELECT.

 

Exemplo: mysql> SELECT DISTINCT cidade FROM alunos;

 

Ordenando os dados

 

Para ordenarmos os dados, é utilizada a cláusula ORDER BY. Que por default, ordena os dados em ASCENDING (crescente), mas se você necessitar visualizar os dados na ordem decrescente, utilize a sigla DESC após a cláusula:

 

Exemplo: mysql> SELECT nome FROM alunos ORDER BY nome DESC;

 

Utilizando alias (apelidos)

 

Existem duas maneiras de se utilizar Alias (apelidos) em uma cláusula do MySQL, são elas: apelido para o nome exibido no título da coluna de uma tabela e apelido para simplificar um nome de tabela que será constantemente utilizado em uma cláusula SELECT.

 

Exemplo 1: apelido para o título

 

mysql> SELECT nome FROM ALUNOS;

 

 

+-------------------+

| nome |

+-------------------+

| João da Silva |

| Maria dos Santos |

| José Fernandes |

+-------------------+

 

 

Neste Select, o resultado apresenta o nome real da coluna.

 

mysql> SELECT nome AS INSCRITOS FROM ALUNOS;

 

+-------------------+

| INSCRITOS |

+-------------------+

| João da Silva |

| Maria dos Santos |

| José Fernandes |

+-------------------+

 

Neste Select, o nome real da coluna foi substituído pelo apelido Inscritos.

 

Exemplo 2: apelido para uma tabela

 

mysql> SELECT ALUNOS.nome, CURSOS.nomecurso FROM ALUNOS, CURSOS

-> where ALUNOS.codcurso = CURSOS.codcurso

-> and ALUNOS.cidade='Rio de Janeiro;

 

Neste exemplo, o nome das tabelas ALUNOS e CURSO são repetidos constantemente dentro desta cláusula.

 

mysql> SELECT A.nome, C.nomecurso FROM ALUNOS AS A, CURSOS AS C

-> where A.codcurso = C.codcurso

-> and A.cidade='Rio de Janeiro;

 

Já neste exemplo, foi utilizado o apelido A para ALUNOS e C para CURSOS, evitando assim que os nomes das tabelas sejam repetidos várias vezes dentro de um mesma cláusula.

 

Apesar das pequenas diferenças, as duas formas apresentam este resultado:

 

+------------------+-------------+

| nome | nomecurso |

+------------------+-------------+

| João da Silva | Windows |

| Maria dos Santos | SQL |

| José Fernandes | Delphi |

+------------------+-------------+

 

Utilizando condições

 

Para fazermos o uso de condições, devemos usar o comando WHERE juntamente com os operadores.

 

Os operadores de comparação lógica estão divididos em duas classes:

 

Operadores de linha única:

= igual a

! diferente de

> maior que

>= maior ou igual a

< menor que

<= menor ou igual a

 

Exemplo: mysql> SELECT nome FROM alunos WHERE matricula='300';

 

Operadores de várias linhas

AND - e

OR - ou

NOT - não

 

Exemplos:

 

mysql> SELECT nome FROM aluno WHERE cidade='Rio de Janeiro' AND matricula='444';

 

mysql> SELECT nome FROM aluno WHERE cidade='Rio de Janeiro' OR matricula='444';

 

 

Precedência de operadores:

 

1. Uma cláusula WHERE pode combinar vários operadores AND e OR.

2. O operador AND tem maior precedência que o operador OR.

3. Os operadores de comparação de linha única tem maior precedência que os operadores AND e OR.

4. Todos os operadores de comparação de linha única têm a mesma precedência.

5. Operadores de igual precedência são calculados da esquerda para a direita.

6. A precedência de operadores pode ser cancelada através de parênteses:

 

Exemplo: mysql> SELECT nome FROM alunos WHERE matricula > '100' AND (cidade = 'Nova Friburgo' OR codcurso='01');

 

Operador LIKE

 

Busca valores alfanuméricos incompletos a partir de um ou mais caracteres:

 

% - corresponde a uma seqüência qualquer de 0 ou mais caracteres.

"_" - corresponde a qualquer caracter.

 

Exemplo: mysql> SELECT nome FROM alunos WHERE nome LIKE 'J%';

 

Esta cláusula lista todos os nomes que comecem com J.

 

Exemplo: mysql> SELECT nome FROM alunos where nome LIKE '_________';

 

Já esta, lista todos os nomes que possuem exatamente 9 caracteres.

 

Operador BETWEEN

 

Busca valores entre uma faixa especificada:

 

Exemplo: mysql> SELECT nome FROM alunos WHERE matricula BETWEEN '100' AND '300';

 

Operador IN

 

Utiliza-se o operador IN para testar valores em uma lista específica:

 

Exemplo: mysql> SELECT nome FROM alunos WHERE codcurso IN ('01', '02');

 

Conclusão:

 

Com este artigo aprendemos diversas maneiras de visualizar os dados de forma organizada, utilizando os atributos do comando Select.

 

 

 

 

Por Adriana Ferreira

adriana@sqlmagazine.com.br

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.