【问题标题】:Some doubts about this simple INNER JOIN query?对这个简单的 INNER JOIN 查询有些疑问?
【发布时间】:2014-05-08 08:40:01
【问题描述】:

我对这个简单的 INNER JOIN 查询有以下疑问。

我有这两个表必须连接在一起:

第一个表名为 VulnerabilityFix,包含以下列:

Id: int 身份

修复名称:varchar

供应商:varchar

标题:varchar

版本:varchar

第二个表名为VulnerabilityAlertDocument_VulnerabilityFix(这会将前一个表绑定到另一个表,但此时并不重要)并包含以下列:

VulnerabilityAlertDocumentId: int

VulnerabilityFixId: int

现在,在我的数据库中,VulnerabilityFix 表只包含一个空记录(该记录有一个 id,但所有其他字段都是空\null),事实上,如果我执行选择 *,我会得到:

select * from VulnerabilityFix

Id  FixName Vendor  Title   Version

1   

进入 VulnerabilityAlertDocument_VulnerabilityFix 我有这样的事情:

select * from VulnerabilityAlertDocument_VulnerabilityFix

VulnerabilityAlertDocumentId      VulnerabilityFixId

78385                             1

78386                             1

....................................................
....................................................
....................................................
78398                             1

好的,所以我希望通过 VulnerabilityAlertDocument_VulnerabilityFix 表的 VulnerabilityAlertDocumentId 字段的值来加入这两个表,我获得所有相关的记录在 VulnerabilityFix 表中。

所以在这种情况下,我打算检索上一个唯一具有 id(值等于 1)且所有其他字段为空\null 的记录。

所以我的查询是:

SELECT VF.* FROM VulnerabilityAlertDocument_VulnerabilityFix VAD_VF
            INNER JOIN VulnerabilityFix VF ON VAD_VF.VulnerabilityAlertDocumentId = VF.Id
            WHERE VAD_VF.VulnerabilityAlertDocumentId = 1

问题是,当我执行此查询时,我获得了一组空记录,而不是我期望获得的唯一记录。

为什么?我错过了什么?

Tnx

【问题讨论】:

  • 查看示例数据,我在 VulnerabilityAlertDocument_VulnerabilityFix 表中没有看到 VulnerabilityAlertDocumentId = 1 的记录。
  • MySQL 不是 SQL Server

标签: mysql sql sql-server database rdbms


【解决方案1】:

我认为您的查询应该更像:

SELECT VF.* FROM VulnerabilityAlertDocument_VulnerabilityFix VAD_VF
            INNER JOIN VulnerabilityFix VF ON VAD_VF.VulnerabilityFixId = VF.Id
            WHERE VAD_VF.VulnerabilityAlertDocumentId = 78385

也就是说,您在 ON 条件下使用了错误的列,因为 VulnerabilityFixId 似乎是 VulnerabilityFix.Id 而不是 VulnerabilityAlertDocumentId 的外键。

另一方面,我在您的数据集中看不到任何值为 1 的 VulnerabilityAlertDocument_VulnerabilityFix.VulnerabilityAlertDocumentId(条件条件)

【讨论】:

  • 我会完全省略 where
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-19
  • 1970-01-01
  • 2018-06-26
  • 1970-01-01
  • 2014-02-24
相关资源
最近更新 更多