【问题标题】:SQL query to get matching records from Table1 and Table2 with a custom column showing 1/0 if data is presentSQL 查询从 Table1 和 Table2 中获取匹配记录,如果存在数据,则自定义列显示 1/0
【发布时间】:2012-07-03 05:39:18
【问题描述】:

我有几个与多语言照片库相关的表格,例如

  • 专辑类别
  • 专辑名
  • 照片
  • 照片详情

两个表的示例表结构。我实际上想要一个结果集,它将显示来自 Photos 表的所有记录列表,用于特定 AlbumID 以及一个自定义列,该列将根据 @987654325 中是否存在特定 PhotoID 显示 TRUEFALSE @表

   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

我尝试了几个基于 JOIN 的查询,但都没有得到想要的结果

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的匹配结果。我迷失了如何才能真正达到预期的结果,如上面的示例“DESIRED OUT PUT”所示

【问题讨论】:

    标签: c# sql sql-server-2008 join


    【解决方案1】:

    使用左外连接。

    您显示的表格示例没有任何意义,因为没有字段可以连接它们,并且您希望在结果中出现的 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。我现在将添加它
    猜你喜欢
    • 2016-08-27
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多