如何获取 MySQL 中不包含其他字符串的所有字符串?

How do I get all strings that do not contain another string in MySQL?

我有一个名为“Domains”的 table 字段“Name”(唯一,始终小写),其中包含我服务器上的域和子域列表,例如:

  1. blah.example.com
  2. www.example.com
  3. www.blah.example.com
  4. example.com
  5. example.nl
  6. example.org

查看此列表,名称 1、2 和 3 是第 4 项的子域。我只想找到此 table 中没有这些子域的所有域。或者,更准确地说,任何在另一条记录中的名称中没有它的一部分的名称。因此只有第 4、5 和 6 项。
如果记录 4 丢失,则此查询也会将项目 1 和 2 作为结果,但不会将项目 3 作为结果。毕竟,项目 3 包含项目 1。
只是想找到可以为我提供此结果的查询... select d.name from domains where d.name not in... 好吧,我的脑子一片空白。

为什么?
这个域列表是由我的网络服务器生成的,它注册了每个在其上请求的新域。我正在处理一个报告页面,我会在其中显示顶级域名以查看其中是否有任何奇怪的域。出于某种原因,我有时会在这些请求中看到未知域名,这可能会提供一些额外的见解。
我将更改我的代码,以便将来在同一 table 中包含对父域的引用,但现在我将不得不处理这个问题和一个简单的 SQL 解决方案。

使用 LIKE

使用匹配后缀的自连接
SELECT d1.name
FROM domains AS d1
LEFT JOIN domains AS d2 ON d1.name LIKE CONCAT('%.', d2.name)
WHERE d2.name IS NULL

DEMO