mysql - 从一张表中获取不同的行和*

标签 mysql sql-server select

我正在尝试获取一张汽车表格,其中三行与其他三列(品牌、型号和组别)相关,而我只想按型号获取一辆汽车。

这是 MySQL 表的图像: enter image description here

您将看到三行具有相同的 model_id(model_id 是另一个表的外键,另一个表称为模型)

用于获取这些汽车的 SQL 查询是:

SELECT *
FROM gm_cars AS cars
INNER JOIN gm_cars_makes AS makes
   ON (cars.make_id = makes.make_id)
INNER JOIN gm_cars_models AS models
   ON (cars.model_id = models.model_id)
INNER JOIN gm_cars_groups AS groups
   ON (cars.group_id = groups.group_id) AND
       makes.make_visible = 1
ORDER BY cars.model_id;

但我希望为一个模型获取一行,这里有一个例子(我使用过Photoshop): enter image description here

有些像:SELECT *, DISTINCT(model_id) FROM cars

最佳答案

如果您仍然想返回所有列,您可以创建子查询以仅返回每个模型一辆汽车,然后像以前一样编写查询:

SELECT * FROM gm_cars AS cars 
INNER JOIN (SELECT model_id, MAX(car_Id) AS car_Id FROM gm_cars GROUP BY model_id) AS grp_cars ON grp_cars.car_Id = cars.car_Id
INNER JOIN gm_cars_makes AS makes ON (cars.make_id = makes.make_id) 
INNER JOIN gm_cars_models AS models ON (cars.model_id = models.model_id) 
INNER JOIN gm_cars_groups AS groups ON (cars.group_id = groups.group_id) AND makes.make_visible = 1 ORDER BY cars.model_id;

您还可以在主查询中添加GROUP BY,并向所有其他列添加聚合函数。但它可以返回具有相同型号的不同汽车的列:

SELECT cars.model_id,
    MAX(car_passengers),
    MAX(car_suitcases),
    ....
FROM gm_cars AS cars 
INNER JOIN (SELECT model_id, MAX(car_Id) AS car_Id FROM gm_cars GROUP BY model_id) AS grp_cars ON grp_cars.car_Id = cars.car_Id
INNER JOIN gm_cars_makes AS makes ON (cars.make_id = makes.make_id) 
INNER JOIN gm_cars_models AS models ON (cars.model_id = models.model_id) 
INNER JOIN gm_cars_groups AS groups ON (cars.group_id = groups.group_id) AND makes.make_visible = 1 
GROUP BY cars.model_id
ORDER BY cars.model_id;

关于mysql - 从一张表中获取不同的行和*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27965102/

相关文章:

mysql - 我的 MYSQL 查询有什么问题?

sql - 为什么系统存储过程在包含所有者的情况下会失败?

sql - JOIN 跨两个表

SQL Case 语句在 where 子句中指定条件?

mysql - 当条件基于另一个 SELECT 的结果时进行 SELECT

select - PL/SQL - 如何根据最新创建日期从 3 个表中提取数据

mysql - 在 Windows 上使用 Django 和 MySQL

php - SELECT 1 FROM 和 if 语句

mysql - 如何从MySQL表中读取Polygon数据

sql-server - 如何在SQL Server中创建SYS模式的表?