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。。我现在要补充一点