小编典典

从两个表查询时如何使用外键

sql

我的问题很基本。关于如何使用外键从两个表中选择某些信息来构建查询?

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是外键vehicles表,该表的主键引用user_idusers表。

所以有人正在搜索所有的大众汽车,我希望将以下信息填充为html(是的,我知道这不是正确的方法-我只是为了简化示例并显示每个表中的信息而已) :

>    echo "Car model:". `vehicles.car_model`
>    echo "Car owner:". `users.user_name`
>    echo "Contacts: ". `users.user_phone`

提前致谢。


阅读 164

收藏
2021-04-22

共1个答案

小编典典

我不确定,如果您了解使用什么外键。外键基本上说“对于此条目,父表中必须有一个条目”。你说user_id is foreign key in vehicle table,这对我来说还不清楚。

因此,假设您有一个这样的表定义:

CREATE TABLE vehicles
(`id_car` int, `car_model` varchar(2), `car_owner` int);


CREATE TABLE users
(`user_id` int, `user_name` varchar(5), `user_phone` varchar(7)
, CONSTRAINT `fk_your_foreign_key` FOREIGN KEY (user_id) REFERENCES vehicles(car_owner)
);

如果要将新用户插入表中,则user_id必须是Vehicles表中car_owner列中的现有条目。

外键在那里实现业务规则。是否每个用户都必须是车主?或者反过来说,每辆车都必须由某人拥有吗?如果您可以用no回答这两个问题,那么在这种情况下不要实现任何外键。但是,如果您可以肯定地回答“是”,请这样做。

要获取您正在寻找的信息,只需执行

SELECT 
* 
FROM 
vehicles 
INNER JOIN users ON vehicles.car_owner = users.user_id
2021-04-22