mysql - SQL 查询将一列中的每个条目与另一列中的每个条目进行比较

标签 mysql

我有以下 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/

相关文章:

mysql - 将包含空值的列从 Excel 导入到 MYSQL Workbench 时出现问题

mysql - Grails Criteria - 同一领域的多个功能

PHP MySQL 创建表时出错 : Cannot add foreign key constraint

php - 添加到表和定向列表中的数据动态列表的链接应显示数据

mysql - 如何在 MySQL 中使用 GROUP BY (date) 从一周中的给定日期开始

mysql - 使用 logstash 同步数据

MySQL Sum 不正确并加入

mysql - union 在表中返回 2 行而不是 1 行

mysql - 通过 sequelize.query() 插入原始查询时不会触发 Hook

mysql - 使用awk在mysql数据库中插入多个用户