Select 记录不包含来自其他 table 的引用

Select record not containing references from other table

无法正确描述标题中的问题,抱歉。 比方说,我有两个 tables A(id, other columns) 和 B(id, a_id, other columns),其中 a_id - A [=26 的外键=]. A 有大约 10000 条记录,B 大约有 10000 条记录。我需要从A中select随机记录,它在tableB中没有关系。可以这样做:

SELECT * FROM (SELECT A.id, B.id as b_id FROM A LEFT JOIN B ON B.a_id = A.id ORDER BY RAND()) tmp WHERE b_id IS NULL LIMIT 1;

但是,子查询在应用 where 和 limit 之前完全执行,因此结果查询执行了 unacceptable 时间。 我想知道,是否有更智能的方法可以在不使用子查询的情况下做同样的事情。

P.S。这部分解决了滥用 ~90% 的子查询实际上在 B 中没有匹配的事实,所以我首先 运行 这个查询:

SELECT * FROM (SELECT A.id, B.id as b_id FROM A LEFT JOIN B ON B.a_id = A.id ORDER BY RAND() LIMIT 10) tmp WHERE b_id IS NULL LIMIT 1;

只有当它没有点击率时,我才是第一个 运行。它有效,但看起来真的很糟糕。

在大数据集中你可以使用exists:

SELECT *
FROM A
WHERE NOT EXISTS (
SELECT *
FROM B
WHERE A.id = B.a_id
)