按姓氏获取不同的名称

lea*_*ner 1 sql oracle select

我有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排序.

Mur*_*nik 5

可以说更优雅的解决方案是使用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)

  • @Edward...这对性能没有影响.子查询中的`SELECT`表达式被忽略. (3认同)