这是一个有点奇怪的问题,所以最好的提问方式是举个例子。我有一份客户名单。我想获取在 CourseHistory
表或 Access
表(或两者)中有相应条目的任何客户。
我想要获取这些客户的最佳单个查询(无子查询)。我想出了
SELECT
c.cusid
FROM
Customers c
CROSS JOIN Realms r
LEFT JOIN Course.CourseHistory ch ON (c.cusid = ch.cusid)
LEFT JOIN Access a ON (c.cusid = a.cusid AND r.realmid = a.realmid)
WHERE
realmname = 'Course'
AND COALESCE(chid, accid)
这有效,但速度明显慢,可能是因为它必须对
Customers
进行全面扫描。由于 CourseHistory
或 Access
可以为空并且结果仍然有效,因此它们必须保持连接。是否有更正确的方法来执行此查询? 最佳答案
摆脱那个 CROSS JOIN 到 Realms 和 INNER JOIN 该表到 Access 代替。
SELECT
c.cusid
FROM
Customers c
LEFT JOIN Course.CourseHistory ch ON (c.cusid = ch.cusid)
LEFT JOIN Access a
INNER JOIN realms r
ON a.realmid = r.realmid
AND r.realmname = 'Course'
ON c.cusid = a.cusid
WHERE
COALESCE(chid, accid)
关于mysql - 用于检查记录是否存在于任一/或表中的最佳单个查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8248951/