Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment faire ce SELECT

2 réponses
Avatar
Mikado
Salut à tous,

Je veux faire un table de Log pour vérifier quelques opérations sur
certaines tables. En partant du principe suivante (je schématise au plus
simple) :

Table1
IdTable1,
strLibelle

Table2
IdTable2,
strLibelle

Table3
IdTable3,
strLibelle

Dans le cas ou j'ai la table Log suivante :

Log
smlEnumNumeroTable (1 = Table1, 2 = Table2, 3 = Table3)
smlEnumAction (le champ indique l'action effectuée)
dtmDateModification

Comment faire un SELECT de Log qui me retourne les strLibelle de chaque
table en fonction de smlEnumNumeroTable. Je trouve que faire une UNION est
pas très rigoureuse...

Y a t'il une solution ?

Merci

Jérôme

2 réponses

Avatar
Patrice
Sinon tu dois pouvoir faire un "JOIN" avec toutes les tables et sans doute
un SELECT compliqué mais cela me parait moins clair...

Ou une fonction utilisateur ?

Ici tu veux bien traiter deux champs de la même façon dans des tables
totalement différentes donc le UNION ne me parait pas plus choquant que cela
car il me semble bien exprimer le plus directement le principe de cette
requête. Pour le coup c'est le JOIN qui me paraitrait "bricolé".

--
Patrice

"Mikado" a écrit dans le message de
news:%
Salut à tous,

Je veux faire un table de Log pour vérifier quelques opérations sur
certaines tables. En partant du principe suivante (je schématise au plus
simple) :

Table1
IdTable1,
strLibelle

Table2
IdTable2,
strLibelle

Table3
IdTable3,
strLibelle

Dans le cas ou j'ai la table Log suivante :

Log
smlEnumNumeroTable (1 = Table1, 2 = Table2, 3 = Table3)
smlEnumAction (le champ indique l'action effectuée)
dtmDateModification

Comment faire un SELECT de Log qui me retourne les strLibelle de chaque
table en fonction de smlEnumNumeroTable. Je trouve que faire une UNION est
pas très rigoureuse...

Y a t'il une solution ?

Merci

Jérôme




Avatar
TLE91
Bonjour,

Une solution possible :
Select
coalesce((Select strLibelle FROM Table1 Where IdTable1= smlEnumNumeroTable),
(Select strLibelle FROM Table2 Where IdTable2=
smlEnumNumeroTable),
(Select strLibelle FROM Table3 Where IdTable3=
smlEnumNumeroTable),
'Inconnu')
, smlEnumAction, dtmDateModification
FROM Log

Le problème c'est que pour gérer une 4ème table il faut modifier le code.
Une solution dynamique me semble difficile.

Petite remarque : il faut faire attention avec votre modèle car il faut
garantir que le IdTable1, IdTable2 et IdTable3 soint tous différents. Sinon,
la logique de récupération du strLibelle ne fonctionne pas !!!

Cordialement.

smlEnumAction (le champ indique l'action effectuée)
dtmDateModification



"Mikado" a écrit :

Salut à tous,

Je veux faire un table de Log pour vérifier quelques opérations sur
certaines tables. En partant du principe suivante (je schématise au plus
simple) :

Table1
IdTable1,
strLibelle

Table2
IdTable2,
strLibelle

Table3
IdTable3,
strLibelle

Dans le cas ou j'ai la table Log suivante :

Log
smlEnumNumeroTable (1 = Table1, 2 = Table2, 3 = Table3)
smlEnumAction (le champ indique l'action effectuée)
dtmDateModification

Comment faire un SELECT de Log qui me retourne les strLibelle de chaque
table en fonction de smlEnumNumeroTable. Je trouve que faire une UNION est
pas très rigoureuse...

Y a t'il une solution ?

Merci

Jérôme