Sql 按姓氏顺序获取不同的名称
我有以下两个表格:Sql 按姓氏顺序获取不同的名称,sql,oracle,select,Sql,Oracle,Select,我有以下两个表格: 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 VARC
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)
);
我正在尝试编写一个查询,以查找所有拥有黑色车辆的车主的名字和姓氏,并按姓氏对车主进行排序,如果同一车主多次拥有彩色车辆,则仅显示一次姓名
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;
在这里,我如何避免计算车辆数量,然后再使用按姓氏排序的结果获得唯一的名称(名字、姓氏)。一个可能更优雅的解决方案是使用
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
一个可能更优雅的解决方案是使用
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
使用
DISTINCT
操作符:
select DISTINCT first_name, last_name
from owner o join vehicle v
on o.id = v.owner_id
where LOWER(color) = 'black'
order by last_name;
我还将它改为查找“black”
,不管它是大写、小写还是混合大写
祝你好运。使用
DISTINCT
操作符:
select DISTINCT first_name, last_name
from owner o join vehicle v
on o.id = v.owner_id
where LOWER(color) = 'black'
order by last_name;
我还将它改为查找“black”
,不管它是大写、小写还是混合大写
祝您好运。使用
选择“8”
或其他简单字符,而不是选择*
,以提高性能。@Edward。这对性能没有影响。子查询中的SELECT
表达式被忽略。这并不是“可以说更优雅”。它比@Gordon Linoff使用join
选择distinct要好,你知道的越多。这是针对EXISTS()
函数的吗?@Edward。是的,特别是针对EXISTS
,因为它正在检查是否存在行而不是列。使用选择“8”
或其他简单字符,而不是选择*
,以提高性能。@Edward。这对性能没有影响。子查询中的SELECT
表达式被忽略。这并不是“可以说更优雅”。它比@Gordon Linoff使用join
选择distinct要好,你知道的越多。这是针对EXISTS()
函数的吗?@Edward。是的,特别是对于EXISTS
,因为它正在检查行而不是列的存在。只需从查询中删除count。只需从查询中删除count。LOWER不会影响颜色列上可能的索引吗?基于LOWER(颜色)创建一个函数,例如在车辆上创建索引LOWER\u COLOR(LOWER(COLOR))
。LOWER不会影响颜色列上可能的索引吗?创建一个基于LOWER(颜色)的函数索引,例如在车辆上创建索引LOWER\u颜色(颜色)(颜色)(LOWER(颜色))
。