【问题标题】:SQL Server Join Relational Table with a Where ClauseSQL Server 使用 Where 子句连接关系表
【发布时间】:2013-09-26 04:53:10
【问题描述】:

如果我去掉 WHERE 子句,Join 乍一看似乎可以正常工作......并且 imageID 485 确实存在......但是,当我在下面插入 WHERE 子句时,我返回 0 个结果。

如何添加 WHERE 子句以正确处理 3 个表连接?

declare @imageID int
set @imageID = 485
    SELECT Movie.movieID, Image.imageID, Image.filename, Image.imageFile
    FROM MovieHasImage
    JOIN Movie
        ON MovieHasImage.movieID = Movie.movieID
    JOIN Image 
        ON MovieHasImage.imageID = Image.imageID
    WHERE Image.imageID = @imageID --HERE IS THE CAUSE OF THE ISSUE
GO

【问题讨论】:

  • 你想达到什么目的?你只是从图像表中选择列,所以你可以这样做: SELECT imageID, filename, imageFile from Image where imageid = @imageid
  • 当您需要输出的所有内容都来自表图像时,为什么所有这些联接?
  • 不清楚是什么问题,你的问题很混乱。 WHEREJOIN 无关——它只是限制返回的行。
  • 如果我在这种情况下感到困惑,有两件事我会尝试帮助我弄清楚发生了什么:1.try SELECT imageID, filename, imageFile from Image where imageid = @imageid(如@JohnBingham 所建议的那样。2.使用 select * 运行当前查询,并且没有 where 子句,特别注意其中包含图像的行。确保它们完全符合预期。我不知道第 2 步会显示什么,但它总是值得一试卡住时看看;)
  • 对不起,我的意思是包含 Movie 表 ID

标签: sql sql-server-2008 select relational-database


【解决方案1】:

您要加入的字段中一定缺少某些内容。您在 Image 表中看到的记录可能在 Movie 表中没有匹配的 imageID,或者在 MovieHasImage 表中没有匹配的记录。如果记录没有匹配的值,则执行内部连接会导致记录删除。

解决此类问题的最简单方法是从您知道它存在的地方追溯它。您可以对表进行左外连接,也可以单独查询每个表以查看它们是否具有您要查找的值。

【讨论】:

  • 原来这是用户错误 - 在插入数据的过程中出现了一些 imageID 没有被插入到关系表中的问题
猜你喜欢
  • 2015-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多