Comment utiliser de clé étrangère lors de l'interrogation à partir de deux tables
Ma question est assez basique.
Il s'agit de comment puis-je construire ma requête avec l'aide d'une clé étrangère pour sélectionner certaines informations provenant de deux tables?
table vehicles
+-------+----------+------------+
| id_car| car_model| car_owner |
+-------+----------+------------+
| 1 | VW | 132|
+-------+----------+------------+
| 2 | VW | 200|
+-------+----------+------------+
table users
+-------+----------+------------+
|user_id| user_name| user_phone |
+-------+----------+------------+
| 132 | Peter| 555-555 |
+-------+----------+------------+
| 200 | Jim | 555-333 |
+-------+----------+------------+
car_owner
est clé étrangère dans vehicles
table qui référence la clé primaire user_id
de users
table.
Si quelqu'un est à la recherche pour tous les VW et je veux que remplir les informations suivantes au format html(oui, je sais que ce n'est pas la bonne façon - je l'utiliser pour simplifier l'exemple et montrer que l'information de chaque table va):
> echo "Car model:". `vehicles.car_model`
> echo "Car owner:". `users.user_name`
> echo "Contacts: ". `users.user_phone`
merci d'avance.
OriginalL'auteur Ale | 2013-04-12
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas sûr, si vous avez compris ce que les clés étrangères sont utilisés pour. Une clé étrangère qui dit en gros "pour cette entrée, il y a une entrée dans la table parent". Vous avez dit
user_id is foreign key in vehicle table
, qui n'est pas clair pour moi.Ainsi, supposons que vous avez une définition de table comme ceci:
Lorsque vous souhaitez insérer un nouvel utilisateur dans la table, le user_id doit être une entrée existante dans car_owner colonne de véhicules de la table.
Les clés étrangères sont là pour mettre en place des règles d'affaires. Est-ce que chaque utilisateur nécessairement être propriétaire d'une voiture? Ou l'inverse, n'toutes les voitures doivent être la propriété de quelqu'un? Si vous pouvez répondre à ces deux questions, alors ne pas mettre en œuvre toutes les clés étrangères pour ce cas. Mais le faire, si vous pouvez répondre oui.
Pour obtenir l'information que vous cherchez juste à faire
OriginalL'auteur fancyPants
Vous avez besoin de Jointure SQL, quelque chose comme cela -
OriginalL'auteur Rishabh
Utiliser JOIN:
À se développer:
vehicles INNER JOIN users
sera de retour que les voitures qui ont des propriétaires. Si vous souhaitez afficher les voitures qui ont une valeur NULL pour le propriétaire, ou à la suppression du propriétaire, puis utiliservehicles LEFT JOIN users
.Pour
vehicles INNER JOIN users
il y a aussi une autre façon possible:Ce dernier sélectionne les lignes correspondant à la condition de le produit cartésien des deux tables.
Il ne devrait pas y avoir une différence. Pour vérifier cette put s'EXPLIQUER face à des requêtes.
OriginalL'auteur Adder
à partir d'un apprenant, il est frappant de constater que les clés étrangères ne semblent pas être fonctionnelle wrt mise en relation des tables dans les requêtes: les requêtes donné dans les 3 réponses ci-dessus ne fonctionne w/o des clés étrangères.
par exemple, pour le dernier exemple, une base de données mysql l'apprenant pourrait s'attendre mysql implicite de déduire à partir d'une clé étrangère de ce véhicule.car_owner = utilisateur.users_id de sorte que lors de l'interrogation
devrait suffire. Alors que le code de requête :
ressemble redondant explicite à la réaffirmation de la clé étrangère
OriginalL'auteur gristy