8417 sujets

Développement web côté serveur, CMS

Bonjour à tous

Mes compétences en SQL sont extrêmement faibles, juste ce qu'il faut pour que je puisse gérer et utiliser une base de données rudimentaire.
C'est pour cela que j'ai besoin de vos lumières dans le cas suivant:

Dans la plupart des tables, il y a trois colonnes: authorID, workID, mvtID.
Chacune de ces colonnes a sa propre signification, mais il arrive très souvent que je doive écrire

SELECT ...
    FROM a
    JOIN b
      ON b.authorID = a.authorID AND b.workID = a.workID AND b.mvtID = a.mvtID


ou bien

SELECT CONCAT(authorID, ';', workID, ';', mvtID) as workKey


C'est dire que le groupe de 3 colonnes est souvent à prendre comme un tout.

Ma question: existe-t-il un moyen de simplifier cette écriture ?

Merci de vos conseils
Modifié par PapyJP (10 Jun 2021 - 13:16)
Salut

je pense que tu n'a pas le choix de passer par des jointures (LEFT JOIN si tu veux garder uniquement les données de la table principale (gauche))
Merci de ta réponse
Mon problème n’est pas la jointure, c’est de fait de gérer cet ensemble de trois colonnes parfois comme 3 éléments distincts, parfois comme un tout. J’ai le sentiment qu’il doit y avoir quelque chose à faire mais je ne trouve pas quoi
du coup je pense pas qu'il y ai un moyen de simplifier une jointure ou un concat si cest ça que tu cherches.

la jointure est fait pour récupèrer des champs d'une autre table via une clé et le concat est fait pour concaténer plusieurs champs. Soit tu utilise l'un, soit tu utilise l'autre, les deux n'ont aucun rapport en soit.

Après si il faut créer un moyen d'utiliser l'un ou l'autre suivant une règle précise, tu peux toujours utiliser un case. on utilisera un case dans l'exemple suivant :

Je dois faire une jointure si l'id est > 10
Je dois faire une concaténation si l'id < 10
alors je fais un case sql.

Modifié par JENCAL (14 Jun 2021 - 14:14)