SQL Problem

Fermé
ska94 - 9 févr. 2017 à 15:36
 maulraz - 9 févr. 2017 à 16:05
Bonjour,

J'ai peu d'expérience concernant SQL du coup je bloque...
Le truc que je veux créer un tableau à la base de SQL ou je mets une condition sur la colonne que je voudrais créer.
je vais essayer d'expliquer j'ai un tableau A ou il y'a deux Colonnes ID et le Type, Je voudrais créer des colonnes dans un autre tableau B ou la colonne est nommé le ID du tableau A qui doit correspondre à un type spécifique (donné).. Je ne sais pas si c'est faisable ou je devrais le faire manuellement par exemple t1.Wert as "*****" mais vraiment j'ai besoin de votre aide, et j'espère que j'ai bien expliqué mon problème.
Merci beaucoup.

A voir également:

1 réponse

Salut,
en effet pas très clair ni bien écris cela n'aide pas à vous répondre.
Ceci dit c'est quelque chose de commun et fréquent(pour pas dire indispensable) ce dont vous parlez.
Cela s'appelle une jointure de table et est possible grâce aux clés étrangères.
En anglais(langue de l'informatique) cela se nomme foreign key(FK).

Si vous utilisez le code pour créer vos tables il faut déclarer la clé étrangère(qui est aussi un identifiant naturel) lors de la création de la table.
Avec un affichage plus graphique (comme phpMyAdmin avec Wamp) vous devez indiquer dans la colonne adéquate que le champ est une clé étrangère.

Voici des explications détaillés mais n'hésitez pas à faire des recherches ailleurs pour avoir des explications complémentaires.

https://openclassrooms.com/courses/administrez-vos-bases-de-donnees-avec-mysql/cles-primaires-et-etrangeres

Je vous invite aussi à lire les explications sur la clé primaire d'une table qui comme son nom l'indique doit être unique.
En effet vous indiquez qu'une table possède 2 identifiants. Hors une et une seule colonne doit (et peut) être identifiant(nommé clé primaire) , sauf justement avec le cas de clés étrangères.

Au passage une bonne habitude est de nommer vos tables et champs de façon explicite:
table A ne veut rien dire et n'évoquera rien à personne. Imaginez si vous avez 10 tables cela devient difficile de savoir quelle lettre correspond à quoi. Même problème facilement évitable si vosus remettez les mains dans le code après un long moment, il y a des chances que vous ne vous rappeliez plus à quoi correspond quoi. Encore pire si quelqu'un d'autre doit s'occuper du SQL il devra perdre beaucoup de temps pour le savoir, quand bien même ce sera possible.
Pour les noms de champs si vous avez 2 "ID"(ce qui est impossible comme précisé plus haut il n'y a qu'une clé primaire = une valeur identifiant de chaque ligne de données -sauf en utilisant des clés étrangères, la clé primaire ajoutée à toutes les clés étrangères seront identifiant) mais aucune colonne ne devrais avoir le même nom et surtout pas ID (pour identifiant)qui permet d'avoir une valeur unique permettant de différencier chaque ligne. Donc plutôt que ID mettez le nom complet de la référence/entité désignée et n'utilisez que le nom ID si vous utilisez une clé primaire arbitraire t abstraite, comme c'est le cas pour un champ numérique auto-incrémenté.

J'espère que mes explications sont compréhensible. Le principe est simple:

Un identifiant(naturel ou arbitraire) est la clé primaire.
Pour croiser les données de différentes tables on reporte à une des tables l'identifiant(la clé primaire) d'une autre table: la clé étrangère.
Ce qui fait que chaque table avec jointure(mot clé JOIN en requête pour des tables croisées) aura pour identifiant sa clé primaire(id naturel ou autre) et aussi toutes les clés étrangères reportant les identifiants qui permettent de retrouver les autres données dans les autres tables.

http://sql.sh/cours/jointures
1