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

2022-08-30 23:28:42

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

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是表中引用表主键的外键。vehiclesuser_idusers

所以有人正在搜索所有大众汽车,我想像html一样填充以下信息(是的,我知道这不是正确的方法 - 我用它来简化示例并显示每个表中的信息):

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

提前致谢。


答案 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必须是车辆表中car_owner列中的现有条目。

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

要获得您正在寻找的信息,只需做

SELECT 
* 
FROM 
vehicles 
INNER JOIN users ON vehicles.car_owner = users.user_id

答案 2

你需要 SQL Join,类似这样的东西 -

SELECT vehicles.car_model, users.user_name, users.user_phone
FROM vehicles
JOIN users ON vehicles.car_owner = users.users_id

推荐