我有以下 NIST 800-53 控件的邻接表:
id item content parent
1 Checklists null 0
2 NIST80053 NIST 80053 1
3 AC Access Control 2
4 1 POLICY.. 3
5 2 ACCOUNT.. 3
6 3 ACCESS.. 3
我正在使用的 NIST 版本 (800-53a) 的结构不会使用某些 item
。任何这样的 item
永远不会在 parent
列中提到它对应的 item
。我正在尝试设计一个 SQL 查询来检查 *each id
以查看它是否 ever 在“parent”列中提到,并显示任何成功的结果。
现在我得到的最接近的是这个简单的语句,它不起作用,因为它只检查每一行的 id 到相同的父行(这总是不相等的,因为一个条目不能是它自己的父) .该行不是只获取未分配的项目,而是返回整个表:
SELECT * FROM MySQL_IMPORTv2 where category_id != parent;
我是 SQL 的新手,所以希望我没有遗漏任何明显的东西,但我们非常感谢您的帮助。
干杯,
马特
最佳答案
幸运的是,使用 exists()
语句很容易做到这一点。虽然我通常不建议对子查询进行限定,但 exsits()
与它们的效率差不多。如果子查询找到结果(任何匹配的结果),它将立即停止并返回 true。
下面的查询将返回列为另一个 id
的父级的任何 id
的所有四个字段
select
id
, item
, content
, parent
from
MySQL_IMPORTv2
where
exists (
select
1
from
MySQL_IMPORTv2 M
where
M.parent = MySQL_IMPORTv2.id
)
关于mysql - SQL 查询将一列中的每个条目与另一列中的每个条目进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49115785/