MySQL中的WITH子句?

时间:2013-02-07 09:55:45

标签: mysql oracle common-table-expression

MySQL是否支持公用表表达式?例如在Oracle中有WITH子句? :

WITH aliasname
AS
  ( SELECT COUNT(*) FROM table_name )
SELECT COUNT(*) FROM dept,aliasname

3 个答案:

答案 0 :(得分:1)

一种方法是使用子查询:

  SELECT COUNT(*) 
  FROM dept,
  ( 
      SELECT COUNT(*) 
      FROM table_name
  ) AS aliasname

请注意,两个表之间的,将与您发布的查询中的两个表交叉连接。如果它们之间存在任何关系,您可以JOIN代替它们。

答案 1 :(得分:1)

SELECT t.name,
       t.num
  FROM TABLE t
  JOIN (SELECT c.id,COUNT(*) 'num1'
          FROM TABLE1 c
         WHERE c.column = 'a'
      GROUP BY c.id) ta1 ON ta1.id = t.id
 JOIN (SELECT d.id,COUNT(*) 'num2'
          FROM TABLE2 d
         WHERE d.column = 'a'
      GROUP BY d.id) ta2 ON ta2.id = t.id

答案 2 :(得分:1)

不,MySQL不支持公用表表达式(CTE)。因此,不必使用WITH tablealias as (....),而是必须执行子查询。

例如,

WITH totalcount AS 
(select userid, count(*) as tot from logins group by userid)
SELECT a.firstname, a.lastname, b.tot
FROM users a
INNER JOIN 
totalcount b 
    on a.userid = b.userid

可以在MySQL中重写为

SELECT a.firstname, a.lastname, b.totalcount
FROM users a
INNER JOIN 
(select userid, count(*) as tot from logins group by userid) b 
    on a.userid = b.userid