我养成了尝试以一种试图限制需要连接的行数的方式来构造查询的习惯。通常,这涉及一个带有GROUP BY的(嵌套的)子查询,也可能是一个LIMIT。示例:
#standardSQL
SELECT
IFNULL(fb, facebook_id) fb,
IFNULL(inst, instagram_id) inst,
IFNULL(tw, twitter_id) tw,
IFNULL(sound, soundcloud_id) sound,
soundcloud_id,
facebook_id,
instagram_id,
twitter_id
FROM `project.dataset.table`
以上是经典的“获取GROUP的最大值”方案。
我可能是错的,但是在我看来,使用MySQL Workbench或纯EXPLAIN分析这样的查询,在某些情况下,子查询的GROUP BY实际上并没有像我期望的那样通过分组来“减少”行数。在一种情况下,子查询产生了大约10.400行,然后将它们与table2 C联接在一起。
但是,通过隔离子查询并单独运行它,查询返回了7.225行,正如我期望的那样。
很明显,我在这里遗漏了一些东西,但愿我知道那是什么:)感谢您的输入。