对这个简单的INNER JOIN查询有些怀疑?

时间:2014-05-08 08:40:02

标签: mysql sql sql-server database rdbms

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

我有两个表必须加入togheter:

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

  

Id:int identity

     

FixName:varchar

     

供应商:varchar

     

标题:varchar

     

版本:varchar

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

  

VulnerabilityAlertDocumentId:int

     

VulnerabilityFixId:int

现在,在我的数据库中, VulnerabilityFix 表只包含一个空记录(此记录有一个id,但所有其他字段都为空\ null),如果我执行select *,我获得:

select * from VulnerabilityFix

Id  FixName Vendor  Title   Version

1   

进入 VulnerabilityAlertDocument_VulnerabilityFix 我有这样的事情:

select * from VulnerabilityAlertDocument_VulnerabilityFix

VulnerabilityAlertDocumentId      VulnerabilityFixId

78385                             1

78386                             1

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

好的,所以我希望JOIN以这种方式传递这两个表,以便传递 VulnerabilityAlertDocurt_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

1 个答案:

答案 0 :(得分:2)

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

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的外键。

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