A语句
select t1.name,t2.samount,t2.place
from users t1,
(
  select name,parentid,sum(amount) samount,place
  from users,CasinoRolling where users.name=CasinoRolling.usergroup
  group by parentid,place
) t2  where t1.id=t2.parentid//--------------------------------------
B语句
select t1.name,t2.amount,t2.place 
from users t1 inner join 
(
    select parentid,sum(amount) as amount,place 
    from users inner join CasinoRolling ON (name=usergroup) 
    group by parentid,place 
) t2 ON t1.id=t2.parentid 

解决方案 »

  1.   

    一样。两个都会被MYSQL优化成相同的执行方案。 最多是 B 比 A快上 10-30 个CPU时钟周期。
      

  2.   

    内连接内连接(inner join)是应用程序中用的普遍的"连接"操作, 它一般都是默认的连接类型. 内连接基于连接谓词将两张表(如 A 和 B)的列组合在一起, 产生新的结果表. 查询会将 A 表的每一行和 B 表的每一行进行比较, 并找出满足连接谓词的组合. 当连接谓词被满足, A 和 B 中匹配的行会按列组合(并排组合)成结果集中的一行. 连接产生的结果集, 可以定义为首先对两张表做笛卡尔积(交叉连接) -- 将 A 中的每一行和 B 中的每一行组合, 然后返回满足连接谓词的记录. 实际上 SQL 产品会尽可能用其他方式去实现连接, 笛卡尔积运算是非常没效率的.SQL 定义了两种不同语法方式去表示"连接". 首先是"显示连接符号", 它显示地使用关键字 JOIN, 其次是"隐式连接符号", 它使用所谓的"隐式连接符号". 隐式连接符号把需要连接的表放到 SELECT 语句的 FROM 部分, 并用逗号隔开. 这样就构成了一个"交叉连接", WHERE 语句可能放置一些过滤谓词(过滤条件). 那些过滤谓词在功能上等价于显式连接符号.内连接"可以进一步被分为: 相等连接, 自然连接, 和交叉连接(见下).程序要应该特别注意连接依据的列可能包含 NULL 值, NULL 值不与任何值匹配(甚至和它本身) -- 除非连接条件中显式地使用 IS NULL 或 IS NOT NULL 等谓词.例如, 下面的查询通过 Employee 表和 Department 表共有的属性 DepartmentID 连接两表. 在两表 DepartmentID 匹配之处(如连接谓词被满足), 查询将组合两表的 LastName, DepartmentID 和DepartmentName 等列, 把它们放到结果表的一行(一条记录)里. 当 DepartmentID 不匹配, 就不会往结果表中生成任何数据.显式的内连接实例:
    SELECT *
    FROM   employee 
           INNER JOIN department 
              ON employee.DepartmentID = department.DepartmentID等价于:
    SELECT *  
    FROM   employee, department 
    WHERE  employee.DepartmentID = department.DepartmentID
      

  3.   

    建议参考一下ANSI SQL92 或ANSI SQL 2003
    或者MYSQL的官方文档。
    http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#join
    13.2.7.1. JOIN语法