Date: prev next · Thread: first prev next last
2012 Archives by date, by thread · List index



Le 15/08/2012 19:11, Dominique_sextant a écrit :
Bonjour,

J'utilise le module Base de Libreoffice.

Je sais très bien trouver les enregistrements communs à 2 tables. J'ai
oublié comment on fait pour chercher les enregistrements de table1 qui ne
sont pas dans table2 :

Ma base est très simple, j'ai 2 tables : 2009 et 2010 avec chacune 3 champs
: Compte, deb, cred

Compte est de type texte (VARCHAR).

Trouver tous les enregistrements de 2010 dont Compte n'a pas d'équivalent
dans Compte de 2009

Une réponse m'a été donnée sur un autre forum mais LIBO trébuche dessus :
SELECT * FROM table1
  WHERE table1.champs11 NOT IN (SELECT champ21 FROM table2);

adaptée à mon cas :

SELECT * FROM 2010
  WHERE 2010.Compte NOT IN (SELECT Compte FROM 2009);

J'ai systématiquement cette erreur :

Statut SQL: HY000
Code d'erreur: 1000

syntax error, unexpected $end, expecting BETWEEN or IN or SQL_TOKEN_LIKE

J'ai essayé de contourner la difficulté avec :

SELECT 2009.Compte, 2009.deb, 2009.cred
  FROM 2009 LEFT JOIN 2010
    ON 2009.Compte = 2010.Compte
    WHERE 2010.Compte IS NULL;

Même punition !

Ma base est ici : http://cjoint.com/?BHptjV9OhXL

Je ne sais pas lire cette erreur et, surtout, je ne sais pas la résoudre.

Merci et bonne journée à tous, 



--
View this message in context: 
http://nabble.documentfoundation.org/Probleme-MySQL-dans-Base-LIBO-3-6-0-4-version-officielle-Ubuntu-12-04-tp4001566.html
Sent from the Users mailing list archive at Nabble.com.
Bonjour ;

Je pense que ton problème vient de la manière de nommer tes tables. Sauf
erreur de ma part, il me semble qu'un nom de table (de base, de
champ...) peut commencer par un chiffre sous MySQL, mais doit
obligatoirement être encadré par des séparateurs s'il ne contient QUE
des chiffres, ce qui est ton cas ici. Ainsi, tes tables 2009 et 2010
devraient être écrites `2009` et `2010` (source :
http://dev.mysql.com/doc/refman/5.0/fr/legal-names.html).

La construction de ta requête avec NOT IN est parfaitement correcte,
elle n'est pas en cause et doit fonctionner. Elle peut juste être
optimisée en utilisant la clause DISTINCT dans la requête imbriquée, de
manière à ce qu'elle ne renvoie qu'une seule fois le numéro de chaque
compte présent dans la table de l'exercice précédent. Ce qui peut être
pratique si la table est volumineuse. La meilleure rédaction serait donc :

SELECT * FROM `2010`
  WHERE `2010`.`Compte` NOT IN (SELECT DISTINCT Compte FROM `2009`);

Cordialement ;

Marc Romano

-- 
Envoyez un mail à users+help@fr.libreoffice.org pour savoir comment vous désinscrire
Les archives de la liste sont disponibles à http://listarchives.libreoffice.org/fr/users/
Tous les messages envoyés sur cette liste seront archivés publiquement et ne pourront pas être 
supprimés

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.