0

OK、このクエリでは、Company、Programmer、Tester、Manager、Contract という 5 つのテーブルから情報を抽出しています。プログラマー、テスター、マネージャーの名前と電話番号、および彼らが働いている会社を抽出します。この会社はこのプログラムを管理する責任があり、x 人からの要求は関係ありません。

問題は以下のコードにあります。プログラマーの名前や電話番号など、特定の情報が他の情報と同じくらい何度も出てきます。会社のマネージャーとテスターの数だけ出てきます。

左外部結合を試してみたところ、さらに多くの結果が得られたので、次回は結果が重複せずに NULL となるように修正するにはどうすればよいですか?

SELECT DISTINCT pg.name,
                pg.Tel_Nr,
                Mgr.name,
                Mgr.Tel_Nr,
                Ts.Name,
                Ts.Tel_Nr,
                Pg.Name,
                con.program_name
FROM Company AS Cm
INNER JOIN Programmer AS Pg ON Pg.company = Cm.name
INNER JOIN Manager AS Mg ON Mg.company = Cm.name
INNER JOIN Tester AS Ts ON Ts.company = Cm.name
INNER JOIN Contract AS Con ON Con.program_name = 'My Program'
AND Cm.name = Con.Company
4

1 に答える 1

0

確かに、おそらく仕事の説明を含む連絡先の詳細のリストを作成する方が理にかなっています. このようなもの:

WITH Cte as (select Cm.name from 
      Contract as Con join Company as Cm on  Cm.name = Con.Company
     where Con.program_name = 'My Program')
SELECT pg.name,  pg.Tel_Nr, 'Programmer' as JobTitle
FROM  Cte   INNER JOIN
    Programmer as Pg  on Pg.company = Cte.name 
UNION ALL
SELECT Mgr.name,  Mgr.Tel_Nr,'Manager' as JobTitle
FROM  Cte   INNER JOIN
     Manager as Mg on Mg.company= Cte.name 
UNION ALL
SELECT Ts.Name,  Ts.Tel_Nr, 'Tester' as JobTitle
FROM  Cte   INNER JOIN
    Tester as Ts on Ts.company = Cte.name 

Cteこのソリューションは、 thrCompanyContractテーブルを複数回 クエリすることを避けるために、共通テーブル式 (ラベル ) をデプロイします。詳細をご覧ください

于 2013-01-06T17:45:54.050 に答える