mysql利用GROUP BY结果联合查询

SQL语句如下:


SELECT A . * , B.num
  FROM
    表一 A,
    (SELECT product_id, count( product_id ) num
      FROM 表二
      GROUP BY product_id
    )B
  WHERE A.product_id = B.product_id
    AND A.status =1
  ORDER BY B.num DESC

其实际上就是把GROUP BY 的结果当作一个新表来使用而已,不知道查询效率如何,或者有没有更好的办法来实现?
另一种实现方法:


SELECT A. * , B.num
  FROM 表一 A
    INNER JOIN (
      SELECT product_id, count( product_id ) num
      FROM 表二
      GROUP BY product_id
    )B
    ON A.product_id = B.product_id
      AND A.status =1
  ORDER BY B.num DESC

一、LEFT JOIN
left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的,换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID)。
B表记录不足的地方均为NULL.

二、RIGHT JOIN
和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.

三、INNER JOIN
inner join并不以谁为基础,它只显示符合条件的记录。如果在INNER JOIN操作中要联接包含Memo 数据类型或 OLE Object 数据类型数据的字段,将会发生错误。

尽量使用Join 而不是Where来列出关联条件,特别是多个表联合的时候。
(1)在效率上,Where可能具有和Inner join一样的效率。但基本可以肯定的(通过SQLServer帮助和其它资料)是Join的效率不比Where差。
(2)使用Join可以帮助检查语句中的无效或者误写的关联条件

发表评论