Forum Programmation.SQL SQLite : IN

Posté par  .
Étiquettes : aucune
0
8
déc.
2009
Bonjour,


La requête suivante retourne tout les lignes où (colonne1 = "a" AND colonne2 = "b") OR (colonne1 = "c" AND colonne2 = "d").
Cette requête fonctionne sous MySQL mais pas sous SQLite (erreur : "Erreur de la requête: near ",": syntax error Unable to execute statement").

Savez-vous comment la faire fonctionner sous SQLite ?


SELECT *
FROM test
WHERE (colonne1, colonne2) IN(('a', 'b'), ('c', 'd'));


Merci énormément !
  • # .

    Posté par  . Évalué à 3.

    en l'écrivant

    SELECT *
    FROM test
    WHERE
    (colonne1 = "a" AND colonne2 = "b") OR
    (colonne1 = "c" AND colonne2 = "d") ;
    • [^] # Re: .

      Posté par  . Évalué à 1.

      Salut,

      C'est une alternative, mais peut-on faire différemment ?

      Merci.
      • [^] # Re: .

        Posté par  . Évalué à 1.

        (faire une requête SQL plus courte, la consommation de mémoire est limité)
        • [^] # Re: .

          Posté par  . Évalué à 1.

          par "requête SQL plus courte", tu parles de la longueur de la chaîne de caractères qui contient la requête ? ou de la conso mémoire lors de son exécution ?
  • # extension MySQL ?

    Posté par  . Évalué à 2.

    SQLite supporte l'opérateur IN mais celui-ci ne renvoie qu'une colonne (c'est pareil avec Postgres). Je soupçonne ta requête d'utiliser un dialecte propre à MySQL.
    SELECT *
    FROM test
    WHERE colonne1 IN('a', 'b')
    AND colonne2 IN ('c', 'd');
    ==> ça marche.
    • [^] # Re: extension MySQL ?

      Posté par  . Évalué à 2.

      arf, j'ai oublié de préciser que l'exemple ci-dessus était un exemple d'utilisation de l'opérateur IN avec SQLite mais qu'il ne donnait pas le résultat attendu par l'auteur du fil.
      • [^] # Re: extension MySQL ?

        Posté par  (site web personnel) . Évalué à 2.

        Il est possible d'utiliser les concat :
        SELECT *
        FROM test
        WHERE concat(concat(colonne1, '¤'), colonne2) IN('a¤b', 'c¤d');
        • [^] # Re: extension MySQL ?

          Posté par  . Évalué à 2.

          Bien vu, mais en SQLite, ça donne :
          SELECT *
          FROM test
          WHERE colonnes1 || colonne2 IN ('a|'|'b', 'c'||'d');
          Pas de concat non plus chez Postgres, c'est une extension Oracle je crois.

          mais ça ne répond toujours pas à la problématique, l'opérateur || fait une bête concaténation de chaine ce qui entraine des effets de bords. Un exemple, supposons que j'ai une table listant des personnes et que je cherche ceux qui répondent au nom de Micheline Battan.
          Avec une requête utilisant l'opérateur de concaténation, tu vas tomber sur:
          * Micheline Battan
          * Michel Inebattan
          * Michelin Ebattan
          etc ... donc ça ne répond pas à la problématique donnée.
          • [^] # Re: extension MySQL ?

            Posté par  (site web personnel) . Évalué à 2.

            Oui, c'est pour cela que j'ai ajouté le caractère ¤, ce qui donnerai :
            SELECT *
            FROM test
            WHERE colonnes1 || '¤' || colonne2 IN ('a'||'¤'||'b', 'c'||'¤'||'d');

            Le but est d'ajouter un caractère qui n'a pas lieu d'être dans les colonnes.

            PS: Pour les concat et les || je croyais que c'était l'inverse et que || était l'extension oracle... Merci de ta remarque
            • [^] # Re: extension MySQL ?

              Posté par  . Évalué à 2.

              Pas mal l'astuce, je la note dans un coin. Je t'avoue que j'ai cru à une erreur de frappe.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.