1

我在 MySQL 查询中有一个相当简单的一对多类型连接。在这种情况下,我想通过左表限制我的结果。

例如,假设我有一个accounts表和一个comments表,我想从中提取 100 行accounts以及每个表的所有关联comments行。

我能想到的唯一方法是在 FROM 子句中使用子选择,而不是简单地选择 FROM accounts。这是我目前的想法:

SELECT a.*, c.* FROM 
    (SELECT * FROM accounts LIMIT 100) a
    LEFT JOIN `comments` c on c.account_id = a.id
    ORDER BY a.id

但是,每当我需要进行某种子选择时,我的中级 SQL 知识就会感觉它做错了什么。

有没有更有效或更快的方法来做到这一点,或者这很好吗?

顺便一提...

这可能是最简单的方法,我可以作为答案。我只是想弄清楚是否有另一种方法可以在速度方面与上述陈述竞争。

4

2 回答 2

1

不,查询很好,就是这样。您可能希望过滤字段而不是过滤a.*字段c.*

于 2012-04-08T17:20:54.640 回答
1

对我来说看起来很完美。

只是想知道您是否可以从上述查询中接收少于或多于 100 行。因为如果对于表格的特定行,accounts表格中没有行,comments那么您将获得少于 100 行。comments同样,如果表中的一行有多个匹配的行,accounts那么您可能会得到超过 100 行。

请参阅:如何优化此查询,执行时间超过一分钟

于 2012-04-08T17:26:27.563 回答