C# SQL查询,从表1和表2中获取匹配的记录,如果数据存在,自定义列将显示1/0
我有几张与多语种相册有关的桌子,比如C# SQL查询,从表1和表2中获取匹配的记录,如果数据存在,自定义列将显示1/0,c#,sql,sql-server-2008,join,C#,Sql,Sql Server 2008,Join,我有几张与多语种相册有关的桌子,比如 专辑类别 专辑名 照片 光电二极管 两个表的示例表结构。实际上,我需要一个结果集,该结果集将显示特定AlbumID的Photos表中所有记录的列表,以及一个自定义列,该列将根据PhotoDetails表中是否存在特定PhotoID来显示TRUE或FALSE Table: Photos PhotoID PhotoFile AlbumID 1 Photo1.jpg 7 2 Photo2.jpg 7
- 专辑类别
- 专辑名
- 照片
- 光电二极管
AlbumID
的Photos
表中所有记录的列表,以及一个自定义列,该列将根据PhotoDetails
表中是否存在特定PhotoID来显示TRUE
或FALSE
Table: Photos
PhotoID PhotoFile AlbumID
1 Photo1.jpg 7
2 Photo2.jpg 7
3 Photo3.jpg 5
4 Photo4.jpg 5
5 Photo5.jpg 7
6 Photo6.jpg 7
Table: PhotoDetails
PDID PhotoID PDTitle AlbumID LanguageID
11 1 Photo 1 7 1
22 2 Photo 2 7 1
33 3 Photo 3 5 1
44 4 Photo 4 5 1
DESIRED OUT PUT
PhotoID PDTitle AlbumID DetailPresent
1 Photo1 7 TRUE
2 Photo2 7 TRUE
5 Photo5 7 FALSE
6 Photo6 7 FALSE
我尝试了一些基于连接的查询,但是没有得到想要的结果
SELECT pd.PhotoTitle, p.PhotoTN,p.PhotoCreatedOn, pd.AlbumID, ISNULL(p.PhotoID,NULL) AS Missing FROM AlbumPhotos p
JOIN AlbumPhotoDetails pd
ON p.PhotoID = pd.PhotoID WHERE pd.AlbumID = 16
这个查询给了我同样的结果
SELECT pd.PhotoTitle, p.PhotoTN,p.PhotoCreatedOn, pd.AlbumID, ISNULL(p.PhotoID,NULL) AS Missing FROM AlbumPhotos p
JOIN AlbumPhotoDetails pd
ON p.PhotoID = pd.PhotoID WHERE pd.AlbumID = 16
OR p.PhotoID IN (SELECT PhotoID FROM AlbumPhotoDetails WHERE LanguageID = 1 AND AlbumID = 16)
上面的查询根据PhotoID
获取匹配结果。我不知道如何才能真正实现上述示例中所示的预期结果“预期输出”使用左外连接
您显示的表格示例没有任何意义,因为没有字段来连接它们,并且示例数据中不存在您想要在结果中显示的PDTitle
值
假设在PhotoDetails
表中有一个PhotoId
字段(就像您在显示的查询中使用的AlbumPhotoDetails
表),并且PhotoDetails
表包含您想要在结果中显示的标题,您可以这样做:
select
p.PhotoId, d.PDTitle, p.AlbumId,
case when d.PhotoId is null then 'FALSE' else 'TRUE' end
from Photos p
left join PhotoDetails d on d.PhotoId = p.PhotoId
where p.AlbumId = 7
请注意,如果PhotoDetails
表中没有相应的记录,则标题将为空。使用左外连接
您显示的表格示例没有任何意义,因为没有字段来连接它们,并且示例数据中不存在您想要在结果中显示的PDTitle
值
假设在PhotoDetails
表中有一个PhotoId
字段(就像您在显示的查询中使用的AlbumPhotoDetails
表),并且PhotoDetails
表包含您想要在结果中显示的标题,您可以这样做:
select
p.PhotoId, d.PDTitle, p.AlbumId,
case when d.PhotoId is null then 'FALSE' else 'TRUE' end
from Photos p
left join PhotoDetails d on d.PhotoId = p.PhotoId
where p.AlbumId = 7
请注意,
PhotoDetails
表中没有相应记录时,标题将为空。您是对的,我没有在PhotoDetails表中添加PhotoID。。我要补充的是,现在你是对的,我错过了在PhotoDetails表中添加PhotoID。。我现在要补充一点