MySQL是否支持公用表表达式?例如在Oracle中有WITH
子句? :
WITH aliasname
AS
( SELECT COUNT(*) FROM table_name )
SELECT COUNT(*) FROM dept,aliasname
答案 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