Rechercher : dans
Par :

SQL - DELETE

Dernière réponse le 27 sep 2008 à 08:30:58 Stef60, le 25 sep 2008 à 16:58:03 
 Signaler ce message aux modérateurs

Bonjour,
J'effectue des requetes SQL via un batch.
Je ne comprend pas pourquoi cette requete ne fonctionne pas :

DELETE a FROM ma_base.ma_table_1 AS a, ma_base.ma_table_2
WHERE ....

Cette requete est lancée via la commande suivante:
mysql -u root -ppassword < requete.sql

J'ai une erreur unknown database.

Mais quand je fais ca :
DELETE a FROM ma_table_1 AS a, ma_table_2
WHERE ....

avec la commande suivante :
mysql -u root -ppassword -D ma_base< requete.sql
ca fonctionne

Quelqu'un sait pourquoi?

Configuration: Windows 2000
Firefox 2.0.0.14

Meilleures réponses pour « SQL DELETE » dans :
SQL - éviter les doublons dans un SELECT VoirProblème Comment éviter les doublons dans les résultats d'une requête SQL ? Solution Il suffit d'utiliser la clause DISTINCT entre SELECT et les champs. Exemple : SELECT distinct id,nom,prenom FROM matable Plus d'informations ...
Gestion des paramètres SQL VoirSQL présente un certain nombre de paramètres au niveau d'Oracle qu'il est possible de visualiser à travers la commande : SHOW ALL Pour modifier la valeur d'un paramètre il suffit d'utiliser la commande : SET NOM_PARAM VALEUR
Sauvegarde automatique d'une BDD sous SQL EXPRESS 2005 VoirSi vous vous voulez automatiser une sauvegarde d'une base de données sous SQL server express, il existe une solution simple grâce à un fichier .bat. Créez un nouveau fichier texte. Ce fichier doit contenir les informations suivantes: SET...
SQL - Jointures VoirExpression des jointures Une jointure (ou θ-jointure) est un produit cartésien de deux tables. On appelle équijointure une θ-jointure dont la qualification est une égalité entre deux colonnes. En SQL, l'expression d'une jointure se...
SQL - Modification de table VoirModification de table Il est possible de supprimer une table grâce à la clause DROP, il existe aussi des commandes moins extrêmes permettant L'ajout de colonnes La modification de colonnes La suppression de colonnes Enfin, il est possible...
SQL - Création de table VoirLe SQL, comportant un langage de définition de données (LDD), permet de créer des tables. Pour cela, il utilise le couple de mots clés CREATE TABLE. La création de tables Le création de tables se fait à l'aide du couple de mots-clés CREATE...

1

titou, le 26 sep 2008 à 11:58:34

Salut,

Je connais pas MySql et je ne peux te dire pourquoi il faut forcer le path d'accès à ta database dans la commande parce qu'il n'identifie pas ce path dans l'ordre SQL mais ca, déja ca m'a l'air plus SQL (;>) :

DELETE * FROM ma_base.ma_table_1 AS a, ma_base.ma_table_2
WHERE ....

Je vais me renseigner.
A+.
titou.

Répondre à titou

2

titou, le 26 sep 2008 à 12:14:00

Ok,

C'est bien un ordre Sql accepté par MySql que tu a suggéré mais j'avais vu ca !!.
Autant pour moi.

D'après ce que j'ai lu, ca ca devrait être correct pour la version MySQL 4.0 :

DELETE ma_base.ma_table_1 FROM ma_base.ma_table_1 AS a, ma_base.ma_table_2
WHERE ....

Ca ca devrait être correct pour la version MySQL 4.1 :

DELETE a FROM ma_base.ma_table_1 AS a, ma_base.ma_table_2
WHERE ....

A+.
titou.

Répondre à titou

3

Stef60, le 26 sep 2008 à 12:58:24

Mon serveur est en Mysql 5.0.51b

Et il m'est impossible d'utiliser cette requete :
DELETE a FROM ma_base.ma_table_1 AS a, ma_base.ma_table_2
WHERE ....

Ca me pose un problème car mon script est multi_base.
C'est pour cette raison que je ne me connecte pas à une base précise.

Répondre à Stef60

4

titou, le 26 sep 2008 à 13:45:13

Re,

Donc tu me confirmes quà la base avec cette version de MySql et quand tu utilises les alias pour tes jointures tu est obligé de faire passer l'alias dans l'odre SQL et que tu ne peux pas forcer directement NOM_DATABASE.NOM_TABLE ??.

Donc ca ca ne marche pas et tu est obligé d'indiquer le -D au niveau du script ? :

DELETE ma_base.ma_table_1 FROM ma_base.ma_table_1 AS a, ma_base.ma_table_2
WHERE ....

A+.
Je me renseigne.
Titou.

Répondre à titou

5

titou, le 26 sep 2008 à 13:50:44

Ah oui g oublié.

Peut tu me donner ton script stp car j'ai trouvé ca pourtant sur le Net (:<) :

.........................................................................................................

"
Il est possible en mySQL de faire des requêtes multi-base.
Je te donne la syntaxe au niveau SQL, et pas au niveau PHP.
Tu peux être connecté soit à un serveur mySQL, soit à une base mySQL.

la syntaxe va être du type : schema.table.field
Ex : soit deux bases foo et bar

SQL
SELECT ft.Champ1, bt.Champ2
FROM foo.table1 ft INNER JOIN bar.table2 bt ON ft.PK = bt.FK
....


ça marche au moins en mySQL 5.0, en dessous il faut faire des tests
"
.............................................................................................................................
Merci.
Titou.

Répondre à titou

6

Stef60, le 26 sep 2008 à 14:02:58

Merci de m'aider.
Toutes mes requetes INSERT , UPDATE , SELECT ALTER TABLE , DROP , SET fonctionne en multi_base.

La seule chose qui ne marche pas c'est DELETE.

Mon script est un enchainement de requete SQL (script SQL pas PHP)
Te le fournir ne te servirait pas à grand chose.

J'ai regardé plusieurs fois le manuel de reference Mysql 5, il ne parle que de DELETE sur multi_table et pas multi_base.

Ce n'est peut-être pas possible de le faire.

Répondre à Stef60

7

titou, le 26 sep 2008 à 14:51:28

Re,

Ça sort de mes compétences si ca marche avec tous les ordres sauf avec le DELETE - ca à l'air d'être un problème d'admin.

"
DELETE a FROM ma_table_1 AS a, ma_table_2
WHERE ....

avec la commande suivante :
mysql -u root -ppassword -D ma_base< requete.sql" --> si ca marche alors c'est déjà pas mal meme si il faut forcer le nom de la database.

Sinon tu ne mas répondu si ca ca marchait :

DELETE ma_base.ma_table_1 FROM ma_base.ma_table_1 AS a, ma_base.ma_table_2
WHERE ....

J'en conclus qu'il faut obligatoirement utiliser un l'alias dans l'ordre DELETE... curieux SGBDR.


A+.
titou.

Répondre à titou

8

Stef60, le 26 sep 2008 à 15:07:17

Desolé j'avais pas vu.

Non ca ne fonctionne pas.
Des que je met un nom de base, j'obtient l'erreur unknown table.

Conclusion : DELETE ne fonctionne qu'avec des noms de table.

Cette synthaxe :
DELETE a FROM ma_table_1 AS a, ma_table_2
WHERE ....
ne fonctionne qu'à partir de Mysql 4.1

Si tu es en 4.0 tu es (apparemment) obligé d'utiliser cette synthaxe
DELETE ma_table_1 FROM ma_table_1, ma_table_2
WHERE ....

Répondre à Stef60

9

titou, le 26 sep 2008 à 15:48:05

Re,

On est d'accord qu'on soit obligé à priori de travailler avec les noms de tables dans les ordres SQL sans pouvoir forcer le nom de la database pour l'ordre DELETE.
L'option "-D Nom_Database" doit être alors indiquée dans l'appel de MySql pour l'ordre DELETE.

Alors que, par exemple :

SELECT * FROM ma_base.ma_table_1 AS a, ma_base.ma_table_2
WHERE ....

avec :

mysql -u root -ppassword < requete.sql

Ça marche selon toi : MySql identifie bien ma_base comme DataBase et ma_table comme table seulement à partir de la syntaxe SQL.

Bizarre quand même non ???!!... je n'y comprends rien.
____________________________________________________________________________________

Bon :

DELETE ma_base.ma_table_1 FROM ma_base.ma_table_1 AS a, ma_base.ma_table_2
WHERE ....

--> ca marche pas mais a tu bien pensé à enlever l'option "-D Data_Base" ???....on sait jamais : il peut ici aller chercher la table ma_base.ma_base.ma_table_1 qui n'existe pas si tu n'a pas enlevé cette option ...

Titou.

Répondre à titou

10

 titou, le 27 sep 2008 à 08:30:58

Re,

Ça doit être un bug au niveau du compilateur SQL pour le DELETE en multi-bases au niveau de la résolution des alias.

Je vois pas d'autres solutions pour ma part.

Amicalement.
Titou.

____________________________________________________________­________________________________
Dodo-Deus pater noster Judicium et Verita in Sui Domus feret.
Ad rerum conversio et mortuorum manes redemptio ex nihilo credo ut Amorem Aeternam in mundum universum ferat.
Gloria in Excelsis Deo - Amen.

Répondre à titou
Collection CommentÇaMarche.net