mysql - 从 3 个绑定(bind)在一起的表中选择什么是最佳解决方案?

标签 mysql sql sql-server rdbms database

我是数据库新手,遇到以下情况:我有 2 个名为 VulnerabilityAlertDocumentVulnerabilitySolution 的主表。

这两个表的列是这样的:

漏洞警报文档列:

Id

VulnerabilityAlertId

SourceId BugTraqID

Title

..........

..........

..........

漏洞解决方案栏:

Id

Description

这两个表通过由名为 VulnerabilityAlertDocument_VulnerabilitySolution 的第三个表实现的多对多关系相互关联,其中每一行都绑定(bind)到一行VulnerabilityAlertDocument 带有一行 VulnerabilitySolution(使用这些表的 id)

VulnerabilityAlertDocument_VulnerabilitySolution 列:

VulnerabilityAlertDocumentId

VulnerabilitySolutionId

现在我的问题是:给定 VulnerabilityAlertDocument 行的 ID,我必须获取所有相关的 VulnerabilitySolution 行

所以我找到了两种可能的解决方案:

1) 我在 VulnerabilityAlertDocument_VulnerabilitySolutionVulnerabilitySolution 表之间使用 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/

相关文章:

php - 通过以下方式检测 MySQL 中的直接更改

SQL 如果值存在则显示一列并在其中显示 yes

java - 将文件插入 postgres

asp.net - 链接服务器的 ASP.NET 连接字符串格式是什么?

sql - 列名不明确,我的 WHERE 语句已被用于其他目的

php - Sql CURDATE() 下个月不起作用

python - 我想用python制作gui来显示RDS MySQL DB中的表

php - 一段时间后自动解封用户

mysql - 有没有办法在mysql中转换时间格式

c# - 手动键入 sql 以映射到 c# 对象,就像 .Include ("") 方法