IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQLite Discussion :

insert into conditionnel


Sujet :

SQLite

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 74
    Points : 56
    Points
    56
    Par défaut insert into conditionnel
    bonjour,

    je veux réaliser des insertion conditionnel en une seule reqête.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    insert into matable (mat, champs) values (valmat,valchamps)
             where valmat not in (select mat from matable);
    ce qu'il parait il n'y a pas de where avec insert et je ne sais pas comment faire.

    merci de votre aide.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 085
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 085
    Points : 30 862
    Points
    30 862
    Par défaut
    INSERT ... VALUES ... ne prend pas en charge la clause WHERE
    En revanche INSERT ... SELECT... l'autorise ; il faut seulement une table source qui peut être DUMMY (ou DUAL je ne connais pas son nom sous SQLite)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO matable (mat, champs) 
    SELECT valmat, valchamps
    FROM dummy
    WHERE valmat NOT IN (SELECT mat FROM matable);
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 74
    Points : 56
    Points
    56
    Par défaut
    ça n'a pas marché et voici le message d'erreur:

    no such table : dual
    pareil pour dummy

    est ce que on peut utiliser le IF?

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 085
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 085
    Points : 30 862
    Points
    30 862
    Par défaut
    DUAL (Oracle) ou DUMMY (Sybase, SQL Server) sont des tables virtuelles qui ne peuvent être mises à jour et contiennent une seule ligne.
    Si SQLite ne propose pas une telle fonctionnalité, rien ne t'empêche de créer une table quelconque, comportant une seule ligne, pour faire la même chose.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 74
    Points : 56
    Points
    56
    Par défaut
    ou ça marche, mais le probmème c'est que mes insertions conditionnelles sont très frequentes en plus je dois le faire dans plusieurs tables. et si j'adopterais cette solution je fairais une usine à gaze.

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 085
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 085
    Points : 30 862
    Points
    30 862
    Par défaut
    Apparemment, tu n'as pas bien compris la requête que je proposais, ou je n'ai pas compris la requête que tu présentais

    La table DUAL ou DUMMY ou ce_que_tu_veux est une table que tu crées une fois pour toutes, dont la structure n'a aucun intérêt et dont le seul usage est de pouvoir l'utiliser dans la clause FROM d'une requête pour retourner une ligne contenant des constantes ou le résultat de fonctions système (date courante, identifiant de l'utilisateur, ...)

    Je crois avoir compris que valmat et valchamps sont des constantes qui contiennent l'identifiant et un attribut de la ligne que tu veux ajouter dans ta table.

    Une autre solution, compte-tenu du test d'existence que tu effectues, serait de placer un index unique sur la colonne mat de manière à interdire l'insertion de doublon.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 74
    Points : 56
    Points
    56
    Par défaut
    j'ai essyé de faire comme tu me l'avais indiqué:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    create table dual (n_importe_quoi char);
    puis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    insert into matable (mat, nom)
    select '99999', 'sofiane'
    from dual
    where '99999' not in (select mat from matable);
    ça n'a pas inseré le nouveau enregistrement malgré que celui là n'existe pas déja dans la table.
    par contre quant j'ai crée un dual de la même forme que matable avec une ligne contenant les valeurs à inserer là ça à marcher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    create table dual (mat char, nom char);
     insert into dual ('99999','sofiane');
     INSERT INTO table1 (mat, nom )
     SELECT mat, nom 
     FROM dual
     where '11111' not in (select mat from table1);
    (j'aimerais bien pouvoir utiliser ta solution)

  8. #8
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 085
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 085
    Points : 30 862
    Points
    30 862
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    DUAL (Oracle) ou DUMMY (Sybase, SQL Server) sont des tables virtuelles qui ne peuvent être mises à jour et contiennent une seule ligne.
    Si SQLite ne propose pas une telle fonctionnalité, rien ne t'empêche de créer une table quelconque, comportant une seule ligne, pour faire la même chose.
    Pour ton premier test, y avait-il bien une ligne dans la table DUAL ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  9. #9
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 74
    Points : 56
    Points
    56
    Par défaut
    tu as tout à fait raison. il memanquais une ligne dans ma table dual.
    je te remercie infiniment.

  10. #10
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Merci pour cette solution qui m'a bien aidé
    En fait, il y a même plus simple (mais sur le même principe) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    INSERT INTO matable (mat, nom)
    SELECT '99999', 'sofiane'
    WHERE '99999' NOT IN (SELECT mat FROM matable);
    Pas besoin de créer une table temporaire contenant une seule ligne (ca marche sous MSSQL 2005, je ne sais pas sous d'autre base)

  11. #11
    Membre actif

    Inscrit en
    Décembre 2004
    Messages
    169
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 169
    Points : 225
    Points
    225
    Par défaut
    Bonjour sabra,

    Je prend le train en vol et j'ajoute une petite précision au sujet des tables "virtuelles" DUMMY (Sybase, SQL Server) et DUAL (Oracle) : il n'y a de telle table sous SQLite, en fait il n'y en a pas besoin, SQLite se débrouille sans.

    Voici un exemple d'utilisation de ces tables selon les différents moteurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select "bonjour" from DUAL; -- Oracle
     
    select "bonjour" from DUMMY; -- Sybase, SQL Server
     
    select "bonjour"; -- SQLite
    Mais c'est surtout utile pour la construction de requêtes complexes comme la construction d' UNION artificielles entre des tables de différentes natures et des constantes ou des insertions de constantes dans une table comme c'était le sujet dans ce vieux post.
    Personnellement j'utilise énormément select "xxxx"; dans mes scripts, cela me permet d'ajouter des commentaires et rend plus lisible les résultats.

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select '';
    select '';
    select 'Decisions:';
    select '';
    select * from Decisions;
    select '';
    select 'Historique:';
    select '';
    select * from Historique;
    select '';
    select 'Lignes:';
    select '';
    select * from Lignes;
    a+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 19/10/2006, 14h28
  2. probleme clé sequentiel avec insert into
    Par shake dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/06/2004, 15h54
  3. probleme d'INSERT INTO et JavaScript
    Par Matlight dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/03/2004, 15h36
  4. erreur SQL ...INSERT INTO
    Par naidinp dans le forum ASP
    Réponses: 20
    Dernier message: 18/09/2003, 11h38
  5. Insert Into + Date
    Par BoeufBrocoli dans le forum SQL
    Réponses: 10
    Dernier message: 13/08/2003, 11h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo