您缺少通过表架构获取必要数据的连接。阅读这篇关于连接的 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
您还没有描述and之间的关系Partner
,所以我假设PPID
on 列ProjectPartners
是关系
您还提到您的ProjectPartners
表有列PPID, Partner1, partner2, partner3....partner25
。您是否只计划拥有 25 个合作伙伴。如果你有 26 个,你会添加一个新列吗?你可能想解决这个问题。
同样在列命名约定中,有些有点混乱。你有PPID
。ProjectPartners
我想这意味着ProjectPartnersId
. 在桌子上ProjectDetails
你有列ProjectDID
。这有点不一致。我想它应该在 ProjectPartnersPDID
上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