我的问题非常基础。 它是关于如何使用外键从两个表中选择某些信息来构建我的查询?
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_id
表的主键users
。
所以有人正在搜索所有大众汽车,我希望将以下信息填充为html(是的,我知道这不是正确的方法 - 我使用它只是为了简化示例并显示每个表格去了:
> echo "Car model:". `vehicles.car_model`
> echo "Car owner:". `users.user_name`
> echo "Contacts: ". `users.user_phone`
提前感谢。
答案 0 :(得分:11)
我不确定,如果您了解外键的用途。外键基本上表示“对于此条目,必须在父表中有一个条目”。你说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
答案 1 :(得分:2)
使用JOIN:
SELECT * FROM vehicles INNER JOIN users ON (vehicles.car_owner=users.user_id)
要展开:vehicles INNER JOIN users
将只返回拥有所有者的汽车。如果要显示对所有者或已删除所有者具有NULL的汽车,请使用vehicles LEFT JOIN users
。
对于vehicles INNER JOIN users
,还有一种不同的方法:
SELECT * FROM vehicles, users WHERE vehicles.car_owner=users.user_id
后者选择与两个表的笛卡尔积相匹配的行。
答案 2 :(得分:2)
你需要SQL Join,就像这样 -
SELECT vehicles.car_model, users.user_name, users.user_phone
FROM vehicles
JOIN users ON vehicles.car_owner = users.users_id
答案 3 :(得分:1)
SELECT vehicles.car_model, users.user_name, users.user_phone
FROM vehicles JOIN users
应该足够了。而查询代码:
ON vehicles.car_owner = users.users_id
看起来像外键的冗余显式重新声明