MySQL JOIN从同一个表中获取多个条目

时间:2015-08-21 03:29:28

标签: mysql join

我有一个用户表,其中包含用户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

我需要获取与用户关联的所有车辆的品牌和型号。

2 个答案:

答案 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;