select b.brand_id, b.brand_name, o.owner_name
from brand b
leftjoin owner o on b.id = o.brand_id;
执行结果长这样:
需求2:展示列表车辆信息、车辆品牌信息、车主信息。
以车辆为主表,分别关联车辆品牌表和车主表
select v.id as vehicleId, b.id as brandId, b.brand_name as brandName, o.owner_name as ownerName
from vehicle v
leftjoin brand b on v.brand_id = b.id
leftjoin owner o on b.id = o.brand_id;
select v.id as vehicleId,
b.id as brandId, b.brand_name as brandName,
o.owner_name as ownerName
from vehicle v
leftjoin brand b on v.brand_id = b.id
leftjoin owner o on b.id = o.brand_id
groupby vehicleId;
❌这样显然是不对的。
报错: this is incompatible with sql_mode=only_full_group_by
原因就是在MySQL 5.7.5以上版本后,要求group by 的字段需要查询的字段与group by的字段满足唯一性。也就是vehicleId有多个,MySQL不知道用哪个。所以在写SQL时保持一个习惯:唯一性的数据需要写在首位。
SQL 标准中不允许 SELECT 列表,HAVING 条件语句,或 ORDER BY 语句中出现 GROUP BY 中未列表的可聚合列。