您缺少通过表架构获取必要数据的连接。
阅读这篇关于 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之间的关系,所以我假设ProjectPartners上的PPID列就是关系
您还提到您的ProjectPartners 表有PPID, Partner1, partner2, partner3....partner25 列。您是否只计划拥有 25 个合作伙伴。如果你有 26 个,你会添加一个新列吗?你可能想解决这个问题。
同样在列命名约定中,有些有点混乱。
您在ProjectPartners 上有PPID。我想这意味着ProjectPartnersId。
在表ProjectDetails 上有ProjectDID 列。
这有点不一致。我想它应该是 PDID on ProjectDetails 或 ProjectPID on ProjectPartners
就我个人而言,我一直偏爱简单的旧 Id 作为我的身份列。
更新:
根据您下面的 cmets,听起来您的表格可能存在一些根本性的问题:
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