2017-12-20 6 views
0

はどのビューで複数のテーブルを結合するために、私は、私はこののビューを作成したいが、そのを私はエラーを示して助けてください、このクエリ誰のビューを作成する方法

メッセージ4506、レベル16、状態1、プロシージャordersview、Line 3各ビューまたは関数内の列名 は一意である必要があります。ビューの列名 'ID'または 関数 'ordersview'が複数回指定されています。

CREATE VIEW ordersview 
AS 
Select * from UserClaimData cd 
Inner join UserClaimDeductions ud on 
ud.CLAIMID = cd.ID 
Inner join UserClaimApproval ua on 
ua.CLAIMID = cd.ID 
inner join ClaimDataBreakdown cb on 
cb.CLAIMID = cd.ID 
inner join AppExpenseTypes ae on 
ae.ID = cb.EXPENSETYPE 
inner join AppNOWTypes an on 
ae.ID = an.EXPENSETYPEID 
inner join AppAreas aa on 
aa.ID = cb.AREAID 
inner join AppZones az on 
cb.ZONEID = az.ID 
inner join AppRegions ar on 
ar.ID = cb.REGIONID 
+1

「Select * from ...」だけではありません。あなたの列を選択してください –

答えて

1

あなたが求めてきました質問への答えは、具体的には、各テーブルから要素を参照することです。

CREATE VIEW ordersview 
AS 
Select cd.ID AS ID1, ua.ID as ID2, etc... from UserClaimData cd 
Inner join UserClaimDeductions ud on 
ud.CLAIMID = cd.ID 
Inner join UserClaimApproval ua on 
ua.CLAIMID = cd.ID 
inner join ClaimDataBreakdown cb on 
cb.CLAIMID = cd.ID 
inner join AppExpenseTypes ae on 
ae.ID = cb.EXPENSETYPE 
inner join AppNOWTypes an on 
ae.ID = an.EXPENSETYPEID 
inner join AppAreas aa on 
aa.ID = cb.AREAID 
inner join AppZones az on 
cb.ZONEID = az.ID 
inner join AppRegions ar on 
ar.ID = cb.REGIONID 

ただし、このような複雑な結合をビュー内に入れないことをお勧めします。必要な列を考え、おそらくストアドプロシージャやテーブル値関数について考えてみましょう。

0

エラーメッセージのどの部分を理解していませんか?

select *があり、すべての表のすべての列がまとめられています。ちょうどjoinの条件に基づいて、ほとんどのテーブルにIDの列があることは明らかです。したがって、IDと呼ばれる複数の列があります。 CLAIMIDもかなり人気があるようです。

通常、select *を使用することはお勧めしません。ただし、ビューには使用しないでください。ビューは、それが含まれている列を明記してください:

​​
0

ビューは仮想テーブルのようなものですが、だから、2(またはそれ以上)の列に同じ名前を持つことはできません。

これを避けるには、*の代わりに[クエリ]を選択し、同じ名前の列が2つあり、両方の列がビューに必要な場合は、別のエイリアス名を付けます。

TableAとTableBにColumnAがあり、両方を表示するとします。このようなビューを作成

CREATE VIEW vm_Sample 
SELECT 
A.COLUMNA COLUMNA_1, 
B.COLUMNA COLUMNA_2 
    FROM TABLEA A INNER JOIN TABLE B 
    ON A.ID = B.ID 
0

ビューには同じ名前の複数の列があり、これがエラーの原因です。

  • AppRegions列がID

  • AppAreas呼ばれている列がID

  • UserClaimDataはの列を指定するSelect *変更ID

という列を持っていると呼ばれていますタあなたがViewテーブルに持ちたいと思っている特定の名前をつけたり、それらを置いたりしないでください。

ビュー内の一部の列の名前を変更する必要があります。 Use AppAreas.ID as aaID

関連する問題