CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[SQL] WHERE pour tableau vide

Titan19
Titan19
Niveau 7
17 août 2015 à 19:20:30

Bonsoir à tous!
Après de nombreuses recherche sur le net et quelques-unes sur le forum pour voir si je pouvais trouver mon bonheur, je vous poste ci-dessous mon problème sur lequel je bloque définitivement. Alors juste pour le contexte, je découvre le SQL depuis quelques semaines seulement en bossant sur un logiciel, et j'apprends vraiment sur le tas. Donc mon niveau est vraiment pas top sur ce langage (d'autant plus que je viens pas d'une formation informatique) et le logiciel sur lequel je bosse est déjà édité et tout ça: je n'ai accès qu'à certaines fonctionnalités pour paramétrer et "personnaliser" le tout.
Bref, assez de bla-bla, je vais tenter d'illustrer mon soucis avec un exemple.

Je veux afficher sous forme de diagrammes tous les clubs de Ligue 1 qui n’ont pas encore reçu de convocations qui indiquent qu’un ou plusieurs de leurs joueurs sont sélectionnés en équipe nationale. Cette convocation est visible dans un tableau qui liste tous les joueurs ayant été convoqués. Ce tableau se trouve sur la page du club, chaque club de L1 ayant son propre tableau qui a comme nom table_club_convoc.

J’ai entre autres comme bases de données :

- La table de tous les joueurs de Ligue 1 à tbl_joueur

- La table de tous les clubs de Ligue 1 à tbl_club

- La table des convocations à tbl_convoc

Ce que je souhaite, c’est donc avoir une requête qui ne traite que les clubs dont le tableau de convocations est vide.

Cette requête doit obligatoirement être de type SELECT xxx FROM yyy WHERE, puisque le formulaire m’impose à sélectionner des noms de champs pour xxx et yyy.

Donc admettons, je mets SELECT nom_club FROM tbl_club mais après, je ne sais pas quoi mettre dans le WHERE afin qu’il ne lise que les pages de clubs dont le tableau de convocations n’a pas d’entrées.

Voilà le topo, en espérant avoir été assez clair. Je sais pas si je vous ai donné toutes les infos nécessaires. Si besoin, faites savoir évidement et j'en m'en remets donc à vos connaissances!
D'avance pour les éventuelles réponses et à ceux qui prendront le temps de lire ce message et de m'aider, je vous dit :merci:

ikkatsu-manga
ikkatsu-manga
Niveau 3
17 août 2015 à 19:39:50

Salut,

Pour te débloqué, je suppose que tes tables tbl_club et tbl_convo contiennent toutes les deux une colonne id_club qui sera l'identifiant du club.

Après la requête est simple :

Select c1.nom_club FROM
tbl_club c1
WHERE c1.id_club NOT IN (SELECT c2.id_club FROM tbl_convoc c2)

Cette requête permet de récupérer tous les club n'ayant pas de convocation.

En espérant avoir répondu à ta question.

Titan19
Titan19
Niveau 7
17 août 2015 à 19:58:51

Ah super, merci pour ta rapide réponse! :-)
De mémoire oui, il me semble qu'il y a une colonne fk_nom_club, qui s'apparente plus ou moins je pense à ce que tu nommes id_club.
Je testerai tout ça demain et mettrai à jour le sujet en conséquence.
Encore merci!

Titan19
Titan19
Niveau 7
18 août 2015 à 10:29:28

Donc je reviens vers vous, la solution d'ikkatsu-manga ne fonctionnant apparemment pas puisque mon diagramme n'affiche rien. Son idée me paraît pourtant très logique, et ma table tbl_convoc n'est pas vide, donc je ne sais pas d'où vient le problème... :question:
Voilà ce que j'ai testé (le NOT IN donc, mais j'ai aussi tenté un NOT EXISTS sans plus de succès):

SELECT nom_club
FROM tbl_club
WHERE nom_club NOT IN
(SELECT fk_nom_club FROM tbl_convoc)

puis ensuite le NOT EXISTS

SELECT nom_club
FROM tbl_club
WHERE NOT EXISTS
(SELECT fk_nom_club FROM tbl_convoc WHERE nom_club=fk_nom_club)

J'ai pourtant bien un lien entre les tables tbl_club et tbl_convoc qui est fait avec respectivement pour chaque table les colonnes nom_club et fk_nom_club. Le problème vient du nom différent de ces colonnes dans chacune des tables?
Merci quand même ikkatsu-manga, je suis moins démuni devant mon soucis même s'il n'est pas résolu!

Pseudo supprimé
Pseudo supprimé 18 août 2015 à 10:57:16

Le NOT IN de ikkkatsu est censé marcher.

Je pense qu'il y a soit un probleme de structure dans tes tables soit qu'il manque des données dans l'une (ou les deux) tables

Pourrait nous donner les résulats de :

SELECT * FROM tbl_club

et

SELECT * FROM tbl_convoc 

Message édité le 18 août 2015 à 11:00:03 par Pseudo supprimé
Titan19
Titan19
Niveau 7
19 août 2015 à 14:01:22

Salut Decibro! Et merci pour ta réponse.
Je ne peux malheureusement pas effectuer les requêtes que je veux comme je l'ai expliqué dans mon premier post, donc je ne peux pas te donner ces résultats.
J'ai en revanche rentré ces lignes après le WHERE NOT EXISTS, mais sans changement.
Cela ne vient donc pas des noms différents des deux colonnes reprenant la même info (nom du club) et faisant donc le lien entre les deux tables?

Koobor
Koobor
Niveau 5
19 août 2015 à 22:23:38

Salut,

Je pense également que la requête "NOT IN" proposée par ikkatsu est OK. Par contre, dans ce que tu as écrit ci-dessus, j'ai un doute car tu essaies de restreindre une sélection sur nom_club avec une sélection sur fk_nom_club.

L'attribut fk_nom_club est une clé étrangère (fk -> foreign key). Je me trompe peut-être mais j'ai tendance à penser que fk_nom_club référence plutôt l'identifiant d'un club et pas son nom. On pourrait avoir 2 clubs avec le même nom (cas rare mais possible) et se retrouver avec un problème de clé étrangère qui référencerait 2 clubs différents. On préférera plutôt un identifiant numérique ou un code comme clé étrangère qui référence une valeur unique dans la table source.

Ce que je veux dire, c'est que la valeur contenue dans fk_nom_club n'a peut-être rien à voir avec la valeur contenue dans nom_club. Si tu relis la requête d'ikkatsu, il compare id_club de la table c1 et id_club de la table c2. Il utilise donc bien 2 attributs équivalents (id_club) pour les tables c1 et c2.

Peut-être qu'il faudrait comparer l'ID du club (dont j'ignore le nom de l'attribut) de la table tbl_club avec fk_nom_club.

La suggestion de Decibro pourrait effectivement nous aider à comprendre la structure des tables et donner la bonne requête. Si tu es obligé de fournir une condition WHERE à la requête, tu peux tenter de compléter ses propositions par un " ... WHERE 1 = 1" ou un "... WHERE xxx IS NOT NULL" où xxx est le nom d'un attribut (nom d'une colonne, si tu préfères) de la table que tu interroges.

Sujet fermé pour la raison suivante : Sujet abandonné
Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment