2014-03-28 2 views
-1

Oracle SQL Developer를 사용할 때 SQL에서 제대로 작동하는 것처럼 보이는 다음 구문을 시도했습니다. 그러나, MySQL에서 코드를 사용할 때 오류가 발생했습니다. "문제가 발생했습니다!"MySQL에서 SELECT 구문에 문제가 발생했습니다.

$result = mysqli_query($con, "SELECT * FROM Table1 NATURAL JOIN (SELECT ID, SUM(row2) FROM table2 GROUP BY ID) NATURAL JOIN (SELECT ID, COUNT(col1) FROM Table2 WHERE ID IS NOT NULL GROUP BY ID)") 
    or die("Something went wrong!"); 

이 경우 구문에 차이가 있습니까, 아니면 내가 잘못하고있는 것일 수 있습니까?

감사합니다.

+0

mysql에서 쿼리를 실행하여 besser 오류 메시지를 받거나 mysqli_query의 오류 코드를 살펴보십시오 (이 함수가 삭제되지 않았습니까?) – frlan

답변

-1

FROM 부분에서 사용되는 모든 하위 쿼리에는 별칭이 필요합니다. 귀하의 경우에는 그 실종. 다른 특정 INNER JOIN 또는 LEFT JOIN을 사용하면 조건 및 시나리오가 명확 해 지므로 NATURAL JOIN을 사용하지 않습니다.

SELECT * FROM Table1 
INNER JOIN (SELECT ID, SUM(row2) FROM table2 GROUP BY ID) a 
ON a.ID = Table1.ID 
INNER JOIN (SELECT ID, COUNT(col1) FROM Table2 WHERE ID IS NOT NULL GROUP BY ID) b 
ON b.ID = Table2.ID; 
0

이 당신의 쿼리입니다 : 그래서이 작동하도록처럼 당신이 당신의 쿼리를 다시 작성할 수있을 수 있습니다

SELECT * 
FROM Table1 NATURAL JOIN 
     (SELECT ID, SUM(row2) FROM table2 GROUP BY ID) NATURAL JOIN 
     (SELECT ID, COUNT(col1) FROM Table2 WHERE ID IS NOT NULL GROUP BY ID) 

MySQL은 내가 사용하지 않는 것이 좋습니다 (NATURAL JOIN을 지원하지만 그것은 또 다른입니다 문제). 오라클과는 달리 테이블에 테이블 별명 (기본적으로 테이블 별명)이 있어야합니다. 열 별칭이 필요할 수도 있습니다. 나는 항상 그것들을 사용하기 때문에 그것이 필요한지 나는 모른다.

이 시도 : 당신은 실제로이 쿼리를 단순화 할 수

SELECT * 
FROM Table1 t1 NATURAL JOIN 
     (SELECT ID, SUM(row2) as cnt_row2 
     FROM table2 
     GROUP BY ID 
    ) t2row NATURAL JOIN 
     (SELECT ID, COUNT(col1) as cnt_col1 
     FROM Table2 
     WHERE ID IS NOT NULL 
     GROUP BY ID 
    ) t2col1 

: ID IS NOT NULL

SELECT t1.*, t2.cnt_col1, t2.cnt_row2 
FROM Table1 t1 INNER JOIN 
     (SELECT ID, COUNT(col1) as cnt_col1, SUM(row2) as cnt_row2 
     FROM Table2 
     GROUP BY ID 
    ) t2 
     ON t1.id = t2.id 

필터링이 적용되지 않습니다하는 NULL 값이 join에 포함되지 않습니다 때문이다.

관련 문제