我对关系数据库有疑问。我知道在使用它时我应该正确设置我的外键,但我没有立即这样做,所以现在我必须清理我的凌乱的数据库,以删除关系破坏的条目。我的表看起来有点像这样:
LINKS
| id |网址|其他不相关的领域|
LINK_USERS
| id | link_id |其他不相关的领域|
很明显LINK_USERS通过link_id字段与LINKS有关系(这是LINKS表中条目的id)
我现在已经搞乱了一段时间,不知怎的,我似乎无法选择LINK中没有引用的LINK_USERS中的所有行。
我必须在此添加,只应在LINKS表上进行删除。所以我想从查询中选择所有行FROM LINK_USERS WHERE在LINKS表中找不到link_id。
正如您可能已经想到的那样,我不是MySQL大师。如果我的问题含糊不清,请告诉我,我会尝试更好地制定它。
提前致谢!
答案 0 :(得分:11)
你的问题根本不含糊;你可以通过非常简单的SQL获得你想要的东西(看起来非常像你正在寻找的英语语言描述):
SELECT * FROM LINK_USERS WHERE link_id NOT IN (SELECT id FROM LINKS);
答案 1 :(得分:8)
这是LEFT JOIN版本:
SELECT *
FROM LINK_USERS
LEFT JOIN LINKS ON LINK_USERS.link_id = LINKS.link_id
WHERE LINKS.link_id IS NULL
它做同样的事情,但它可能在更大的表上更快。 YMMV。