必要なデータを取得するためのテーブル スキーマを介した結合がありません。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あると想定していますPPIDProjectPartners
ProjectPartnersまた、テーブルには列があることにも言及しましたPPID, Partner1, partner2, partner3....partner25。25 人のパートナーのみを計画していますか。26 の場合、新しい列を追加しますか? あなたはそれに対処したいかもしれません。
また、列の命名規則には、少し混乱しているものもあります。を持っPPIDていProjectPartnersます。という意味だと思いますProjectPartnersId。テーブルProjectDetailsには列がありますProjectDID。これは少し矛盾しています。PDIDそれは ProjectPartners に掲載するか、ProjectDetailsまたはProjectPIDProjectPartnersに掲載する必要があると思い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