我有2个表:
CREATE TABLE owner (
id INT NOT NULL,
first_name VARCHAR(20) NOT NULL,
last_name VARCHAR(20) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE vehicle (
id INT NOT NULL,
owner_id INT NOT NULL, -- Foreign key to the owner table
name VARCHAR(20) NOT NULL,
color VARCHAR(20) DEFAULT NULL,
PRIMARY KEY (id)
);
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个查询来查找所有拥有黑色车辆的所有者名字和姓氏,并按姓氏对所有者进行排序,并且如果同一所有者多次拥有该车辆颜色车辆,则仅显示一次名称.
select first_name, last_name, count(v.id)
from owner o join vehicle v on o.id = v.owner_id
where color = 'black'
group by first_name, last_name
order by last_name;
Run Code Online (Sandbox Code Playgroud)
在这里,我如何避免车辆计数,然后获得唯一名称(first_name,last_name),其结果按last_name排序.
可以说更优雅的解决方案是使用exists运营商而不是加入:
SELECT first_name, last_name
FROM owner o
WHERE EXISTS (SELECT *
FROM vehicle v
WHERE v.color = 'black' AND o.id = v.owner_id)
ORDER BY last_name ASC
Run Code Online (Sandbox Code Playgroud)