|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre habitué
![]() Étudiant Inscription : novembre 2006 Messages : 169 ![]() |
Bonjour à tous,
J'essaie d'écrire une requête qui me permettrait d'ajouter une ligne dans une table seulement si elle n'existe pas déjà. J'ai donc opté pour l'instruction IF / THEN / ELSE mais impossible de la faire fonctionner, le SGBD me donne une erreur de syntaxe. J'ai écrit la requête suivante : Code :
Si quelqu'un pouvait me mettre sur une piste ça m'aiderait beaucoup, Merci d'avance, Alvaten |
||
|
|
00
|
|
|
#2 | |||
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
bonjour
as tu pense a utiliser le EXISTS (en fait NOT EXISTS) ? au fait, l'erreur de syntaxe est du Citation:
Code :
|
|||
|
|
00
|
|
|
#3 | ||||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour,
pour éviter votre erreur de syntaxe, il faudrait ecrire votre requete ainsi : Code SQL :
Et si j'en crois la logique, ce serait plutot un "<>" et non un ">" Mais cette requête sera plus performante (inutile de compter le nombre total d'occurrences, il suffit de savoir s'il y en a (une) ou pas !) Code SQL :
D'autre part, placez une contrainte d'unicité sur country... |
||||
|
|
00
|
|
|
#4 | ||
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 417 ![]() |
Salut !
Juste pour rigoler, si ton but est bien d'insérer seulement si n'existe pas : Code :
__________________
(c'est ma photo) Paku, Paku ! Pour les jeunes incultes : non, je ne suis pas un pokémon... Le pacblog : http://pacmann.over-blog.com/ |
||
|
00
|
|
|
#5 |
|
Membre habitué
![]() Étudiant Inscription : novembre 2006 Messages : 169 ![]() |
Merci pour vos réponses.
@dehorter olivier: Ta solution ne fonctionne pas, j'ai toujours une erreur de syntaxe sur le IF, pour le exists je l'avais testé mais pas moyen de le faire fonctionner mieux @aieeeuuuuu: Vos solutions me donnent aussi une erreur de syntaxe sur le IF, pourtant il devrait être compatible avec ma version de mySql (v5+), pour le "<>" c'est exact, j'ai du écrire trop vite. @pacmann: Impeccable, c'est exactement ça, et ça marche sur SGBD. Par contre serait-il possible de me donner une courte explication ? Je comprend bien la requête imbriquée mais pas trop le INSERT INTO / SELECT |
|
|
00
|
|
|
#6 | ||||
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 417 ![]() |
En fait, j'essaie toujours de faire le code le plus incompréhensible pour les autres.
Comme ça, quand je me fais virer, c'est le retour de baton. ... nan je déconne, mais il est vrai que la solution est plus une astuce qu'autre chose. - Tu insères le résultat d'un SELECT. C'est la syntaxe qui te permet d'insérer dans les tables les lignes obtenues à partir d'une autre requête. Code :
Donc tu considères le résultat de count(*) comme une table à une ligne et une colonne, et tu sélectionnes toutes les lignes pour lesquelles count(*) vaut 0 ! (si count(*) vaut 0 : une ligne retournée, sinon 0) Code :
(J'espère que c'est un peu plus clair)
__________________
(c'est ma photo) Paku, Paku ! Pour les jeunes incultes : non, je ne suis pas un pokémon... Le pacblog : http://pacmann.over-blog.com/ |
||||
|
00
|
|
|
#7 |
|
Membre habitué
![]() Étudiant Inscription : novembre 2006 Messages : 169 ![]() |
C'est très clair merci beaucoup, j'ai pu écrire les requêtes concernées et ça marche impeccable.
|
|
|
00
|
|
|
#8 | ||
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Pacman vous à donné une bonne requête, mais sur le long terme elle sera catastrophique en terme de performances, car pour exécuter les COUNT(*) de la sous requête il faut verrouiller la table entière !
Le plus simple est donc d'utiliser le NOT EXISTS : Code :
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
||
|
00
|
|
|
#9 |
|
Membre habitué
![]() Étudiant Inscription : novembre 2006 Messages : 169 ![]() |
Merci de cette précision.
Après un test de votre requête, il s'avère qu'elle donne aussi une erreur de syntaxe sur le where. L'abscense de clause FROM est elle permise ? |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com