2016-04-22 14 views
1

私はSQLを学んでいます。私は(多かれ少なかれ)の1つしか持たないselectemployeeemp_name, emp_lname, project_name)にします。私はemployee_projectからselectだけのユニークなemp_idにしようとしていますテーブルから一意のデータを選択する方が良い考えです

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) 
); 

テーブル:

は、私は、データベース内の3台を持っています。

このコードは

select emp_id, count(pr_id) from employee_project 
    group by emp_id having count(pr_id) = 1 

employee_projectから私にユニーク emp_idを与えるしかし、私は emp_idselect emp_namepr_idemp_lnameproject_nameを必要としています。私はすでに emp_idを使って select pr_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 

今、私はこれらのemployeeprojectについて必要なものすべてを選択するためのすべてを持っています。最後にコード:

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 

これを簡単に行う方法はありますか?

ありがとうございました。

+1

私はそうは思わない。 '' distinct''は私に最初のものを与えますが、ユニークではありません。もう一回テーブルにいれば必要ありません。 – Guja1501

答えて

1

探しているプロジェクトは1つだけなので、グループ内の任意の集計関数を使用してプロジェクトを取得することもできます。 min(pr_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 
関連する問題