Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Libreoffice. Module Base, syntax MySQL

13 views
Skip to first unread message

Dominique

unread,
Aug 15, 2012, 4:22:22 AM8/15/12
to
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

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

Merci et bonne journ�e � tous,
--
Dominique
Courriel : dominique point sextant ate orange en France
Esto quod es

Benoit Izac

unread,
Aug 15, 2012, 8:43:03 AM8/15/12
to
Bonjour,

le 15/08/2012 � 10:22, Dominique a �crit dans le message
<502b5c3e$0$6202$ba4a...@reader.news.orange.fr> :

> 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
>
> Je ne sais pas lire cette erreur et, surtout, je ne sais pas la r�soudre.

Tu peux essayer une jointure :
SELECT 2009.Compte, 2009.deb, 2009.cred
FROM 2009 LEFT JOIN 2010
ON 2009.Compte = 2010.Compte
WHERE 2010.Compte IS NULL;

Personnellement, j'utilise
<http://www.codeproject.com/KB/database/Visual_SQL_Joins/Visual_SQL_JOINS_orig.jpg>
pour m'y retrouver.

--
Benoit Izac

Dominique

unread,
Aug 15, 2012, 1:06:07 PM8/15/12
to
Le 15/08/2012 14:43, Benoit Izac a �crit :

> Tu peux essayer une jointure :
> SELECT 2009.Compte, 2009.deb, 2009.cred
> FROM 2009 LEFT JOIN 2010
> ON 2009.Compte = 2010.Compte
> WHERE 2010.Compte IS NULL;
>
> Personnellement, j'utilise
> <http://www.codeproject.com/KB/database/Visual_SQL_Joins/Visual_SQL_JOINS_orig.jpg>
> pour m'y retrouver.
>

Il est bien pr�sent�, ton graphique.

J'ai test� ta formule et j'ai toujours la m�me r�ponse :

Statut SQL: HY000
Code d'erreur: 1000

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

Je me demande si �a ne viendrait pas d'un bug de Libreoffice... Je vais
poser la question sur un forum sp�cialis�.

Je te remercie et te souhaite une bonne fin de journ�e,

Ph. B.

unread,
Aug 16, 2012, 7:52:14 AM8/16/12
to
Dominique a �crit :
Bonjour,

Le nom de la table est incorrect. Double-quotez la pour que LO puisse
l'analyser :

select * from "2009"

Sinon renommer les tables en T2009 et T2010. La requ�te fonctionnera :

select
*
from T2009
where Compte not in
(
select Compte
from T2010
)

Attention �galement � la casse des caract�res sur les noms de colonne...
--
Philippe.

Dominique

unread,
Aug 16, 2012, 1:39:27 PM8/16/12
to
Le 16/08/2012 13:52, Ph. B. a �crit :

> Le nom de la table est incorrect. Double-quotez la pour que LO puisse
> l'analyser :
>
> select * from "2009"
>
> Sinon renommer les tables en T2009 et T2010. La requ�te fonctionnera :
>
> select
> *
> from T2009
> where Compte not in
> (
> select Compte
> from T2010
> )

En bien, c'�tait filou. J'ai renomm� en T2009 et T2010 et �a fonctionne :-)

Merci beaucoup mais pourquoi LO est-il incapable d'analyser une table
avec juste des caract�res num�riques dans le nom d'une table ?

Bonne soir�e,

Benoit Izac

unread,
Aug 16, 2012, 2:02:45 PM8/16/12
to
Bonjour,

le 16/08/2012 � 19:39, Dominique a �crit dans le message
<502d304f$0$6216$ba4a...@reader.news.orange.fr> :

> Merci beaucoup mais pourquoi LO est-il incapable d'analyser une table
> avec juste des caract�res num�riques dans le nom d'une table ?

Je n'ai pas tiqu� mais j'ai le m�me comportement avec postgresql (enfin
il ne me laisse pas la cr�er). Je pense que c'est comme la plupart des
noms de variable dans la majorit� des langages de programmation : on ne
peut pas utiliser un caract�re num�rique au d�but du nom de la variable.

--
Benoit Izac

Ph. B.

unread,
Aug 16, 2012, 2:51:50 PM8/16/12
to
Dominique a �crit :
> Le 16/08/2012 13:52, Ph. B. a �crit :
>
>> Le nom de la table est incorrect. Double-quotez la pour que LO puisse
>> l'analyser :
>>
>> select * from "2009"
>>
>> Sinon renommer les tables en T2009 et T2010. La requ�te fonctionnera :
>>
>> select
>> *
>> from T2009
>> where Compte not in
>> (
>> select Compte
>> from T2010
>> )
>
> En bien, c'�tait filou. J'ai renomm� en T2009 et T2010 et �a fonctionne :-)
>
> Merci beaucoup mais pourquoi LO est-il incapable d'analyser une table
> avec juste des caract�res num�riques dans le nom d'une table ?
>
> Bonne soir�e,

Mais LO l'accepte, enfin au moins la version 3.5.5 ;-)

select
*
from "2009"
where Compte not in
(
select Compte
from "2010"
)

Cela �tant, SQL "normalis�" ne permet pas le nommage des objets (table,
colonne, etc) commen�ant par un chiffre...
--
Philippe.

Dominique

unread,
Aug 16, 2012, 3:23:30 PM8/16/12
to
Le 16/08/2012 20:51, Ph. B. a �crit :

>
> Mais LO l'accepte, enfin au moins la version 3.5.5 ;-)
>
> select
> *
> from "2009"
> where Compte not in
> (
> select Compte
> from "2010"
> )
>
> Cela �tant, SQL "normalis�" ne permet pas le nommage des objets (table,
> colonne, etc) commen�ant par un chiffre...

Je ne savais pas. Un jour, � la retraite peut-�tre, j'essayerai de faire
autre chose que butiner avec MySQL... C'est fou ce que je me suis mis de
c�t� pour la retraite. Je ne pourrai jamais tout faire :-)

Merci et bonne soir�e,

Denis Beauregard

unread,
Aug 16, 2012, 3:31:29 PM8/16/12
to
Le Thu, 16 Aug 2012 19:39:27 +0200, Dominique <z...@aol.com> �crivait
dans fr.comp.applications.sgbd:

>Merci beaucoup mais pourquoi LO est-il incapable d'analyser une table
>avec juste des caract�res num�riques dans le nom d'une table ?

Et comment il le sait que c'est une variable ?

Techniquement, il doit transformer les variables en constantes. Alors,
si 2011 est une constante comme un pointeur et qu'il cherche donc une
table � l'adresse 2011 et non une table appel�e 2011...

M'enfin, il faut suivre la syntaxe du langage et c'est � peu pr�s
partout la m�me chose : un chiffre indique une constante (sauf en
Cobol ?).


Denis

Dominique

unread,
Aug 16, 2012, 11:45:04 PM8/16/12
to
Le 16/08/2012 21:31, Denis Beauregard a �crit :
Du haut de mes 54 ans, je suis un pur produit du Basic (GWBasic plus
particuli�rement gracieusement fournit avec le d�j� bien ancien DOS et
le Locomotive Basic qui �quipait les Amstrad CPC 464. Je ne sais plus
quel Basic a vu mes premi�res lignes de code avec un Sharp PC1211 que je
poss�de toujours) et, c'est vrai, je ne nommais jamais une variable avec
uniquement des chiffres.

D�j�, il y a trente ans...

Bon, c'est promis. Je mettrai toujours au moins un caract�re
alphab�tique dans mes noms de tables :-)

Merci et bonne journ�e,

SQLpro

unread,
Aug 28, 2012, 11:32:19 AM8/28/12
to
Le 17/08/2012 05:45, Dominique a écrit :
> Le 16/08/2012 21:31, Denis Beauregard a écrit :
>> Le Thu, 16 Aug 2012 19:39:27 +0200, Dominique <z...@aol.com> écrivait
>> dans fr.comp.applications.sgbd:
>>
>>> Merci beaucoup mais pourquoi LO est-il incapable d'analyser une table
>>> avec juste des caractères numériques dans le nom d'une table ?
>>
>> Et comment il le sait que c'est une variable ?
>>
>> Techniquement, il doit transformer les variables en constantes. Alors,
>> si 2011 est une constante comme un pointeur et qu'il cherche donc une
>> table à l'adresse 2011 et non une table appelée 2011...
>>
>> M'enfin, il faut suivre la syntaxe du langage et c'est à peu près
>> partout la même chose : un chiffre indique une constante (sauf en
>> Cobol ?).
>
> Du haut de mes 54 ans, je suis un pur produit du Basic (GWBasic plus
> particulièrement gracieusement fournit avec le déjà bien ancien DOS et
> le Locomotive Basic qui équipait les Amstrad CPC 464. Je ne sais plus
> quel Basic a vu mes premières lignes de code avec un Sharp PC1211 que je
> possède toujours) et, c'est vrai, je ne nommais jamais une variable avec
> uniquement des chiffres.
>
> Déjà, il y a trente ans...
>
> Bon, c'est promis. Je mettrai toujours au moins un caractère
> alphabétique dans mes noms de tables :-)
>
> Merci et bonne journée,
>

la norme sur les noms des objets SQL :
http://sqlpro.developpez.com/cours/sqlaz/ddl/?page=partie1#L1

A +



--
Frédéric BROUARD - expert SGBDR et SQL - MVP SQL Server - 06 11 86 40 66
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Enseignant Arts & Métiers PACA, ISEN Toulon et CESI/EXIA Aix en Provence
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************

Dominique

unread,
Aug 28, 2012, 12:43:38 PM8/28/12
to
Le 28/08/2012 17:32, SQLpro a écrit :

> la norme sur les noms des objets SQL :
> http://sqlpro.developpez.com/cours/sqlaz/ddl/?page=partie1#L1

Finalement, c'est la même norme que pour les noms de fichiers, si on
veut assurer une bonne portabilité.

Merci pour ce site et bonne soirée,

SQLpro

unread,
Aug 30, 2012, 1:41:24 PM8/30/12
to
Le 28/08/2012 18:43, Dominique a �crit :
> Le 28/08/2012 17:32, SQLpro a �crit :
>
>> la norme sur les noms des objets SQL :
>> http://sqlpro.developpez.com/cours/sqlaz/ddl/?page=partie1#L1
>
> Finalement, c'est la m�me norme que pour les noms de fichiers, si on
> veut assurer une bonne portabilit�.
>
> Merci pour ce site et bonne soir�e,
>
>
pas du tout et une table n'est pas un fichier !

1) les accents et autres caract�res diacritique ne sont pas admis dans SQL
2) la longueur d'un nom de fichier est de 255 et celle d'un de table est
de 128.
3) si vous utilisez un mot r�serv� de SQL (ce qui est fortement
d�conseill�) alors vous devez l�entourer de guillemets exemple :
CREATE TABLE "TABLE"
("SELECT"' VARCHAR(32),
"FROM" VARCHAR(32),
"WHERE" VARCHAR(32))

A +

--
Fr�d�ric BROUARD - expert SGBDR et SQL - MVP SQL Server - 06 11 86 40 66
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Enseignant Arts & M�tiers PACA, ISEN Toulon et CESI/EXIA Aix en Provence
Audit, conseil, expertise, formation, mod�lisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************

0 new messages