我是数据库新手,遇到以下情况:我有 2 个名为 VulnerabilityAlertDocument 和 VulnerabilitySolution 的主表。
这两个表的列是这样的:
漏洞警报文档列:
Id
VulnerabilityAlertId
SourceId BugTraqID
Title
..........
..........
..........
漏洞解决方案栏:
Id
Description
这两个表通过由名为 VulnerabilityAlertDocument_VulnerabilitySolution 的第三个表实现的多对多关系相互关联,其中每一行都绑定(bind)到一行VulnerabilityAlertDocument 带有一行 VulnerabilitySolution(使用这些表的 id)
VulnerabilityAlertDocument_VulnerabilitySolution 列:
VulnerabilityAlertDocumentId
VulnerabilitySolutionId
现在我的问题是:给定 VulnerabilityAlertDocument 行的 ID,我必须获取所有相关的 VulnerabilitySolution 行
所以我找到了两种可能的解决方案:
1) 我在 VulnerabilityAlertDocument_VulnerabilitySolution 和 VulnerabilitySolution 表之间使用 JOIN,并选择使用 VulnerabilityAlertDocument 行 ID。
或
2)首先我执行如下查询:
select * VulnerabilityAlertDocument_VulnerabilitySolution where VulnerabilityAlertDocumentID = 3
然后,我获取每个获取行的 VulnerabilitySolutionId 的相关值,并对这些行执行查询
什么是更好的?我认为使用 JOIN 运算符的解决方案,但我不太确定
最佳答案
选择 1,使用内连接。检查此示例。内部联接可以轻松找到您的数据。
declare @a table (id int, name varchar(50))
declare @b table (id int, name varchar(50))
declare @c table (ida int, idb int)
insert into @a values(1,'a'),(2,'b'),(3,'c'),(4,'d'),(5,'e')
insert into @b values(1,'x'),(2,'y'),(3,'z')
insert into @c values(1,1),(1,2),(2,1),(2,3),(3,1),(3,2),(3,3)
declare @value int = 1
select
a.name, b.name
from
@c c
inner join @a a on c.ida = a.id
inner join @b b on c.ida = b.id
where c.ida = 1 -- here you just comment and check the logic
关于mysql - 从 3 个绑定(bind)在一起的表中选择什么是最佳解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23495374/