加入sql语句

时间:2013-06-15 18:07:42

标签: mysql sql join left-join

我有这样的声明:

SELECT board.*, numlikes 
FROM board
LEFT JOIN (SELECT 
              pins.board_id, COUNT(source_user_id) AS numlikes
           FROM likes 
           INNER JOIN pins ON pins.id = likes.pin_id 
           GROUP BY pins.board_id) likes ON board.id = likes.board_id
WHERE who_can_tag = '' 
ORDER BY numlikes DESC LIMIT 10

但我还需要将其他两个陈述加入其中:

SELECT COUNT(owner_user_id) 
FROM repin 
INNER JOIN pins ON pins.id = repin.from_pin_id 
WHERE pins.board_id = '$id'

SELECT COUNT(is_following_board_id) 
FROM follow 
WHERE is_following_board_id = '$id'

我设法让第一个加入,但我遇到了其他人的问题 - 认为它可能会太长。

有更快的执行方式吗?

1 个答案:

答案 0 :(得分:1)

理想情况下,从最小的结果集开始,然后开始加入下一个最小的表。

您不希望数据库在一堆大表上执行全表连接,然后最后有一个where子句,删除数据库刚刚创建的99%的行。

在Oracle中,我做了一个:

SELECT *
  FROM big_table bt
  JOIN DUAL ON bt.best_filter_column='the_value'
--now there are only a few rows
  JOIN other_table_1 ...
  LEFT JOIN outer_join_tables ...

最后包括所有OUTER JOINS,因为它们不会删除任何行,所以希望你已经过滤了很多行。