必要なデータを取得するためのテーブル スキーマを介した結合がありません。joinsに関するこの MSDN の記事を読んでください。
select ProjectDetails.ProjectDID, ProjectDetails.Project
from ProjectDetails
join ProjectPartners on ProjectPartners.ProjectDID = ProjectDetails.ProjectDID
join Partners on Partners.PartnerId = ProjectPartners.PPID
where Partners.PartnerName = @partnerName
ProjectPartners
との関係を説明していないので、上の列が関係でPartner
あると想定していますPPID
ProjectPartners
ProjectPartners
また、テーブルには列があることにも言及しましたPPID, Partner1, partner2, partner3....partner25
。25 人のパートナーのみを計画していますか。26 の場合、新しい列を追加しますか? あなたはそれに対処したいかもしれません。
また、列の命名規則には、少し混乱しているものもあります。を持っPPID
ていProjectPartners
ます。という意味だと思いますProjectPartnersId
。テーブルProjectDetails
には列がありますProjectDID
。これは少し矛盾しています。PDID
それは ProjectPartners に掲載するか、ProjectDetails
またはProjectPID
ProjectPartnersに掲載する必要があると思いId
ます。
アップデート:
以下のコメントに基づいて、テーブルに少し根本的な問題があるように思えます。
create table Partners (
Id int not null primary key identity,
PartnerName nvarchar(100) not null)
go
create table ProjectDetails(
Id int not null primary key identity,
Project nvarchar(100) not null)
go
create table ProjectPartners (
PartnersId int not null,
ProjectDetailsId int not null
)
go
alter table ProjectPartners add constraint FK_ProjectPartners_PartnersId_Partners_Id foreign key (PartnersId) references Partners(Id)
alter table ProjectPartners add constraint FK_ProjectPartners_ProjectDetailsId_ProjectDetails_Id foreign key (ProjectDetailsId) references ProjectDetails(Id)
go
上記のように、データベース スキーマをもう少し柔軟なものに変更することをお勧めします。ProjectPartners
これにより、新しいパートナーが生まれるたびに新しい列が追加され、テーブルが増え続けるのを防ぐことができます。
外部キーに関するすべての問題を修正し、テーブルをもう少し直感的にします。
これにより、次の SQL が生成されます。
select ProjectDetails.Project, ProjectDetails.Id
from ProjectDetails
join ProjectPartners on ProjectPartners.ProjectDetailsId = ProjectDetails.Id
join Partners on Partners.Id = ProjectPartners.PartnersId
where Partners.PartnerName= @partnerName