3

私はいくつかのテーブルを持っています:

従業員:id、name、id_suc、id dep、id_sec
Suc:id_suc、名前
Dep:id_dep、id_suc、name
Sec:id_sec、id_dep、id_suc、name

私のせいにしないでください。これは既存のアプリケーションです。データベースを作成しておらず、内部にデータが多すぎてそれに応じてレポートが作成されているため、構造に触れることができません。尋ねられたとおりにレポートを変更しようとしています。

私はクエリを実行します:

SELECT DISTINCT 
  s.name as sucurs, 
  d.name as depart, 
  c.name as section, 
  e.name AS emp 
FROM 
  employee e 
  join suc s on (e.id_suc = s.id_suc) 
  join dep d on (e.id_dep = d.id_dep) 
  join sec c on (e.id_sec = c.id_sec) 
ORDER BY 
  sucurs, depart, section, emp

デカルト積を持ってきます。が欲しいです:

sucurs1, depart1, section1, emp1
sucurs1, depart1, section1, emp2
.....

(次に、レポートでsuc、dep、secの順にグループ化します)

代わりに、私は得ました:

sucurs1, depart1, section1, emp1
sucurs2, depart1, section1, emp1

等々。sucursALL 、ALL depart、ALLをもたらしsection、場合によっては複製されempます。

何かが足りないのですが、何がわかりません。手がかりはありますか?

4

1 に答える 1

5

ええと、あなたは常にテーブルを結合しているだけemployeeです-それDepまたリンクされているように見えSucます-それであなたは2番目のJOIN条件が必要です(onだけでなくonにも参加id_depしてid_sucください!)。テーブルは3つのIDをテーブルと共有するため、3つのSecJOIN条件も必要です。Employee

SELECT DISTINCT 
  s.name as sucurs, 
  d.name as depart, 
  c.name as section, 
  e.name AS emp 
FROM 
  employee e 
INNER JOIN 
  suc s ON e.id_suc = s.id_suc
INNER JOIN 
  dep d ON e.id_dep = d.id_dep AND e.id_suc = d.id_suc
INNER JOIN 
  sec c ON e.id_sec = c.id_sec AND e.id_suc = c.id_suc AND e.id_dep = c.id_dep
ORDER BY 
  sucurs, depart, section, emp
于 2012-03-26T13:03:47.683 に答える