SQL - DELETE

Résolu/Fermé
Stef60 Messages postés 251 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 22 avril 2009 - 25 sept. 2008 à 16:58
 titou - 27 sept. 2008 à 08:30
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?
A voir également:

10 réponses

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.
0
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.
0
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.
0
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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.
0
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.
0
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.
0
Stef60 Messages postés 251 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 22 avril 2009 41
26 sept. 2008 à 12:58
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.
-1
Stef60 Messages postés 251 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 22 avril 2009 41
26 sept. 2008 à 14:02
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.
-1
Stef60 Messages postés 251 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 22 avril 2009 41
26 sept. 2008 à 15:07
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 ....
-1