php - 如何在 MySQL 数据库中查找与其他行不正确关联的行

标签 php mysql

我的 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/

相关文章:

mysql - 如何从mysql中不同条件的表中选择两个不同的值?

python - 为什么我无法将其正确插入到 Django 中?

Python 程序在使用 py2exe 转换为 exe 后不处理错误

php - MySQL从两个表中使用JOIN选择随机行

php - sql代码显示每个类别中具有多个最大值的类别的最大值?

php - mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows等…期望参数1为资源或结果

php - 创建两个数组之间的关系

php - 伊伊 : how to select 1 registration using the best method

php - JS 和 PHP 的 md5 相同

Mysql跨表更新权限问题