[problème] requête imbriquée

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [problème] requête imbriquée

par totorodu31 » 02 mai 2005, 11:43

merci pour les réponses

par Cyrano » 30 avr. 2005, 12:22

Pour la génération de programmeur suivante?
Il y a des chances : le temps que tous les éditeurs de bases de données s'entendent à peu près pour adopter un nouveau système, ça risque de prendre un certain temps, même si ils s'accordent tous à reconnaître que le nouveau système est meilleur et plus simple.

En attendant, on a pas fini de se torturer les méninges pour exploiter correctement l'ASNI-SQL actuel. Ce qui pourrait faire avancer rapidement les choses, ce serait la sortie d'un SGBD avec la nouvelle norme qui prennent une ampleur considérable dans un temps très limité, suffisament vite et fort pour faire réagir les éditeurs majeurs. Mais là encore, j'ai un doute, ces derniers sont certainement déjà en train de préparer la prochaine génération et attendent les premiers coups de feu des adversaires avant de montrer quoi que ce soit.

Je vais jeter un oeil aux articles que tu me suggères, merci pour l'info :)

par Ripat » 30 avr. 2005, 12:13

Cyrano: :wink:

On a tous, un jour ou l'autre, souffert de la mise en SQL de requêtes complexes.

Beaucoup de spécialistes de bases de données s'accordent à dire que les jours du ANSI SQL comme langage d'accès à une RDBMS sont comptés. Trop étriqué et que dire des implémentations "propriétaires" des Oracle, MS-SQL, Sybase et autres MySQL.

Mais ça bouge semble t'il :
http://www.techworld.com/applications/f ... tureid=910
http://dbappbuilder.sourceforge.net/Rel ... troduction

Pour la génération de programmeur suivante?

En attendant il faudra faire avec des sous-requêtes et vivre avec la problématique des champs nuls.

par Cyrano » 30 avr. 2005, 10:48

:ordi: <== Cyrano prend des notes ;)
Excellent, même si je ne suis pas le destinataire, merci Ripat

par Ripat » 30 avr. 2005, 10:45

Si la requête était un SELECT, il faudrait utiliser une jointure sans hésiter,
mais je ne sais pas si l'on peut utiliser une jointure dans un DELETE...

Daz ?... :?:
C'est possible mais il faut alors utiliser la syntaxe réservée aux "cross-table" DELETE (versions 4.0 et +). Si on utilise la syntaxe "normale":

Code : Tout sélectionner

DELETE FROM t1 LEFT JOIN t2 ON t1.col = t2.col WHERE t2.col IS NULL
MySQL voit le JOIN et se dit: "Ah! il veut un DELETE multi-tables. Mais il ne me dit pas de quelle table je dois supprimer les enregistrements! Voilà encore un programmeur qui pense que je vais tout deviner à sa place etc... (litanie connue des langages martyrisés) Et paf-> que je te balance une erreur!

La bonne manière maintenant.

Code : Tout sélectionner

DELETE t1 FROM t1 LEFT JOIN t2 ON t1.col = t2.col WHERE t2.col IS NULL
Ca semble un peu curieux de répéter deux fois t1, mais c'est uniquement de cette manière que ça marchera.

En passant, le DELETE multi-table est souvent méconnu mais est très pratique pour, par exemple, supprimer des clients ou membres de toutes les tables où ils se trouvent.

par albat » 29 avr. 2005, 22:10

Si la requête était un SELECT, il faudrait utiliser une jointure sans hésiter,
mais je ne sais pas si l'on peut utiliser une jointure dans un DELETE...

Daz ?... :?:

par guy » 29 avr. 2005, 22:06

Une jointure n'est pas plus indiquée dans des cas comme cela ?
Guy

par Daz » 29 avr. 2005, 16:03

Code : Tout sélectionner

DELETE FROM gamme WHERE id_gamme not in ( SELECT id_gamme FROM relation_famille_gamme )
Ta requete est correcte !
(a part le ';' qui manque ) :wink:

Les sous-requetes sont dispos depuis MySQl 4.1

T'inquièt Albat, c 'est juste pour les stats !! :twisted:

++

Daz

par Cyrano » 29 avr. 2005, 15:41

Pour la première question, vérifie la version de ton serveur MySQL, je ne crois pas que les requêtes imbriquées soient supportées avant la version 4 et encore je ne suis pas certain de mon affaire... :?:

par albat » 29 avr. 2005, 15:37

Daz, t'abuses !
Tu ne crois pas que tu aurais aussi pu répondre à la première question ? :lol:

par totorodu31 » 29 avr. 2005, 15:36

merci pour l'information

par Daz » 29 avr. 2005, 15:34

Salut,

La reponse a la deuxieme question est non !

++

Daz

[problème] requête imbriquée

par Totorodu31 » 29 avr. 2005, 15:23

Bonjour
J'utilise dans mon code cette requête imbriquée dans un site mais elle ne fonctionne pas, pouvez vous me dire où se trouve mon erreur ?

Code : Tout sélectionner

DELETE FROM gamme WHERE id_gamme not in ( SELECT id_gamme FROM relation_famille_gamme )

Sinon je me posais la question s'il était possible de mettre plusieurs requêtes à la suite comme ci-dessous (je me suis inspiré du langage sql de base) :

Code : Tout sélectionner

$sql = " DELETE FROM famille WHERE id_famille=$id_famille ; DELETE FROM relation_famille_gamme WHERE id_famille=$id_famille ; "; $req = mysql_query($sql) or die('Erreur SQL !<br>'.$requete.'<br>'.mysql_error()); ...
J'ai testé, en vain, y a-t-il une alternative que de faire les requêtes une à la fois ?