6

我有一个关于关系数据库的问题。我知道在使用它时我应该正确设置我的外键,但我没有立即这样做,所以现在我必须清理我凌乱的数据库以删除关系中断的条目。我的表看起来有点像这样:

友情链接
| 编号 | 网址 | 其他不相关的领域 |

LINK_USERS
| 编号 | 链接ID | 其他不相关的领域 |

应该很明显 LINK_USERS 通过 link_id 字段(即 LINKS 表中条目的 id)与 LINKS 有关系

我已经搞砸了一段时间,不知何故,我似乎无法从 LINK_USERS 中选择在 LINKS 中没有引用的所有行。

我必须在这里补充一点,删除应该只发生在 LINKS 表上。所以我想要从查询中选择所有行 FROM LINK_USERS WHERE link_id 在 LINKS 表中找不到。

正如您可能已经想到的那样,我不是 MySQL 专家。如果我的问题含糊不清,请告诉我,我会尝试更好地制定它。

提前致谢!

4

2 回答 2

15

您的问题一点也不含糊;你可以用非常简单的 SQL 得到你想要的(它看起来很像你对你正在寻找的东西的英语描述):

 SELECT * FROM LINK_USERS WHERE link_id NOT IN (SELECT id FROM LINKS);
于 2012-10-02T18:23:20.147 回答
12

这是 LEFT JOIN 版本:

SELECT *
FROM LINK_USERS
LEFT JOIN LINKS ON LINK_USERS.link_id = LINKS.link_id
WHERE LINKS.link_id IS NULL

它做同样的事情,但在更大的桌子上可能会更快。YMMV。

于 2015-02-04T04:41:41.337 回答