2013-02-07 2 views
4

MySQL은 공통 테이블 표현식을 지원합니까? 예를 들어 오라클에는 WITH 절이 있습니까? : 두 테이블 사이의 ,이 두 테이블이 게시 된 쿼리와 동일 가입 교차 것MySQL의 WITH 절?

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

참고 :

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

'AS'는 오라클 모르는 별명에 사용되는로 MySQL에 다시 쓸 수 있습니다. 당신의 질문은 정확히 무엇입니까? –

+0

@BhavikShah - 그들은 MySQL의 공통 테이블 표현에 대한 지원을 묻습니다. – APC

+0

아니오 [MySQL에서 "WITH"절을 어떻게 사용합니까?] (http://stackoverflow.com/questions/1382573/how-do) -you-use-with-clause-in-mysql) –

답변

1

한 가지 방법은 하위 쿼리를 사용하는 것입니다. 그들 사이에 어떤 관계가 있다면 JOIN 대신 할 수 있습니다.

+0

mysql에 WITH 절이 있습니까? – Madhav

+0

@Madhav 아니요 MySQL에 'WITH'가 없습니다. 질문에서 알 수 있듯이, 그는 WITH 절을 사용하여 정의 된 Oracle CTE와 같은 것이 필요합니다. mysql의 또 다른 방법은 하위 쿼리를 사용하는 것입니다. –

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 
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 

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