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.