我的 MySQL 数据库中有一个表,部分内容如下所示:
+----+-------+-------+
| id | owner | onwed |
+----+-------+-------+
| 1 | A | B |
| 2 | B | A |
| 3 | C | D |
| 4 | D | C |
| 5 | E | X |
+----+-------+-------+
这里的重要特征是所有条目都是成对的,因此每个“所有者”也被它们关联的记录“拥有”。 A“拥有”B,B也“拥有”A。D“拥有”C,C也“拥有”D。
但是,在第 5 行,我们遇到了问题。 E“拥有”X,但没有 X“拥有”E 的条目。
我需要能够遍历这个有数千条记录的表,并找到所有实例,例如第 5 行,我们有一条孤立记录。没有与具有匹配对立面的“所有者”和“拥有”字段相关联的地方。此外,无法保证成对的行会像我的示例中那样相互跟随。
这个问题超出了我的 MySQL 能力方式。当我知道我正在寻找的值(value)是什么时,我就知道如何进行搜索。但我不知道如何逐行浏览每一行,取出值,然后使用这些值进行另一次搜索。我希望有人能帮助我,我很抱歉我对这件事一无所知,所以我没有任何代码可以建议。
我不太担心效率,因为这是一项检查,我只会在有理由怀疑存在问题时不时运行一次。此外,如果有帮助,我会通过 PHP 脚本管理我的 MySQL 数据库,因此如果可以利用 PHP 代码使任务更易于管理,也可以使用它。
最佳答案
您需要的是一个join
。如果您使用拥有的所有者加入表本身。
SELECT T1.Id, T1.Owner, T1.Owned, T2.Id, T2.Owner, T2.Owned
FROM tablename T1
LEFT JOIN tablename T2
ON T1.Owned = T2.Owner
WHERE T2.Owned != T1.Owner
OR T2.Id IS NULL
尝试在没有 WHERE 子句的情况下运行查询以查看此连接的作用。您可以在一行中同时获得 owner 和 owned,然后您可以比较它们是否匹配。
关于php - 如何在 MySQL 数据库中查找与其他行不正确关联的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15361426/