我有一个用户表,其中包含用户ID和分配给该用户的多个车辆。每个车辆是一个整数值,它等于单独表格中的车辆ID。我想检索用户ID以及与该用户关联的每个车辆的品牌和型号。我可以使用以下查询获取用户ID以及单个车辆的品牌和型号:
SELECT users.user_id, vehicles.make, vehicles.model
FROM users
JOIN vehicles ON users.vehicle1 = vehicles.vehicle_id
我尝试了多个连接等等。但是我无法让它工作。
非常感谢任何帮助。
已修改为包含表格结构:
我试图将这些作为图片包含在内但我还没有足够的帖子。
用户表
https://www.dropbox.com/s/tbn6e0omn96m41k/users.JPG?dl=0
车辆表
https://www.dropbox.com/s/8dpr22c9llbzrf2/vehicles.JPG?dl=0
我需要获取与用户关联的所有车辆的品牌和型号。
答案 0 :(得分:0)
SELECT users.user_id,vehicles.make,vehicles.model 来自用户,车辆 在哪里users.vehicle1 = vehicles.vehicle_id
注意:最好在用户表vehicle_id中命名列,这样很明显它是另一个表中的id并使其成为外键。
答案 1 :(得分:0)
@ vthokie11 - 德鲁有一个好点。你的桌子结构不好。 您可以参考here
我会通过以下方式获得结构: 1. 用户表:
DROP TABLE IF EXISTS `stacktest`.`user`;
CREATE TABLE `stacktest`.`user` (
`user_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(45) DEFAULT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
2. 车辆表:
DROP TABLE IF EXISTS `stacktest`.`vehicle`;
CREATE TABLE `stacktest`.`vehicle` (
`vehicle_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`make` varchar(45) DEFAULT NULL,
`model` varchar(45) DEFAULT NULL,
PRIMARY KEY (`vehicle_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
3. user_vehicle table:(维护用户与车辆之间的关系)
DROP TABLE IF EXISTS `stacktest`.`user_vehicle`;
CREATE TABLE `stacktest`.`user_vehicle` (
`user_id` int(10) unsigned NOT NULL,
`vehicle_id` int(10) unsigned NOT NULL,
KEY `FK_user_vehicle_1` (`user_id`),
KEY `FK_user_vehicle_2` (`vehicle_id`),
CONSTRAINT `FK_user_vehicle_2` FOREIGN KEY (`vehicle_id`) REFERENCES `vehicle` (`vehicle_id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `FK_user_vehicle_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
现在你需要执行这个简单的查询:
SELECT user.user_id, vehicle.make, vehicle.model
FROM user LEFT JOIN user_vehicle on user_vehicle.user_id=user.user_id
LEFT JOIN vehicle on vehicle.vehicle_id=user_vehicle.vehicle_id where user.user_id=1;