我对这个简单的 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
答案 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