Sql 从表中选择唯一数据的更好方法
我正在学习SQL。我想Sql 从表中选择唯一数据的更好方法,sql,database,Sql,Database,我正在学习SQL。我想选择员工(emp\u name,emp\u lname,project\u name),它只有一个项目(不是更多或更少) 我在数据库中有3个表: 表: create table employee( emp_id char (5) primary key, emp_name nvarchar(15) not null, emp_lname nvarchar(20) ); create table project( pr_id char(5)
选择员工(emp\u name,emp\u lname,project\u name
),它只有一个项目(不是更多或更少)
我在数据库中有3个表:
表:
create table employee(
emp_id char (5) primary key,
emp_name nvarchar(15) not null,
emp_lname nvarchar(20)
);
create table project(
pr_id char(5) primary key,
project_name nvarchar(10) not null,
project_budjet int
);
create table employee_project(
emp_id char (5) foreign key references employee(emp_id),
pr_id char(5) foreign key references project(pr_id),
constraint premppk primary key(emp_id, pr_id)
);
我正试图从employee\u项目
中选择only uniqueemp\u id
此代码为我提供了来自employee\u项目的唯一emp\u id
select emp_id, count(pr_id) from employee_project
group by emp_id having count(pr_id) = 1
但是我需要emp\u id
和pr\u id
来选择emp\u名称
,emp\u名称
和项目名称
。我也尝试使用emp\u id
选择pr\u id
。代码:
select ep.emp_id, ep.pr_id from employee_project as ep,
(
select emp_id, count(pr_id) from employee_project
group by emp_id having count(pr_id) = 1
) CT
where CT.emp_id = ep.emp_id
现在,我可以选择所有我需要的关于这些employee
和project
的信息。最后,代码:
select employee.emp_name, employee.emp_lname, project.project_name
from employee, project,
(
select ep.emp_id, ep.pr_id from employee_project as ep,
(
select emp_id, count(pr_id) from employee_project
group by emp_id having count(pr_id) = 1
) CT
where CT.emp_id = ep.emp_id
) CK
where CK.emp_id = employee.emp_id and CK.pr_id = project.pr_id
有什么方法可以轻松做到这一点
谢谢您的帮助。因为您只需要寻找一个项目,所以您也可以使用组中的任何聚合函数来获取该项目。我使用了min(pr\u id)
,但您也可以使用avg()
或max()
之后,您可以联接表以获取所有其他列值
select e.*, p.*
from
(
select emp_id, min(pr_id) as pr_id
from employee_project
group by emp_id
having count(pr_id) = 1
) ep
join employee e on e.emp_id = ep.emp_id
join project p on p.pr_id = ep.pr_id
我不这么认为distinct
将首先提供给我,但不是唯一的。我不需要,如果它在桌上一次。