stview 0 Denunciar post Postado Dezembro 20, 2004 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
walace 1 Denunciar post Postado Dezembro 20, 2004 Até onde eu sei o delete só funciona com uma tabela. você terá que executar duas vezes a instrução sql para fazer o que quer. Compartilhar este post Link para o post Compartilhar em outros sites
stview 0 Denunciar post Postado Dezembro 20, 2004 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
Cerrito 0 Denunciar post Postado Dezembro 23, 2004 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
stview 0 Denunciar post Postado Dezembro 23, 2004 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
Cerrito 0 Denunciar post Postado Dezembro 23, 2004 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
Cerrito 0 Denunciar post Postado Dezembro 23, 2004 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