2012-03-01 8 views
0

내가 뭘 하려는지는 sub.blockid=id과 JOIN입니다. 하위 쿼리에서 blockid의 이름을 id으로 변경했지만 USING 키워드는 서브 스크립 션 테이블에서 이름이 바뀐 id 열 (blockid) 대신에 여전히 id 열을 연결합니다.Mysql 이름 바꾸기 열

$subscribequery = "JOIN (SELECT id as subid, blockid as id from subscribe WHERE userid='1') AS sub 
    USING (id)"; 

ON와 쉬운 것입니다하지만 난 다른 사용하여 하위 쿼리 가입해야합니다. 다른 서브 쿼리와 함께 USING 대신 ON을 사용하려고하면 열이 모호한 오류가 발생합니다.

동일한 검색어에 USINGON을 모두 사용할 수 있습니까? 위에서 시도한 것처럼 열의 이름을 바꿀 수 있습니까?

다음은 전체 쿼리입니다. 범인은 두 번째 JOIN 쿼리입니다.

SELECT * FROM products 
JOIN (SELECT nid, sid, name AS max_name from products WHERE guideline='1' group by nid, sid) AS at1 
     USING (nid, sid) 
JOIN (SELECT id as subid, blockid as id from subscribe WHERE userid='1') AS sub 
     USING (id) 
WHERE id = subid AND name = max_name AND pending='0' AND deleted='0' 
ORDER BY subid DESC, nid DESC; 

답변

1

분명히하기 위해 실제로 열의 이름을 바꾸지 않고 별칭을 지정하기 만하면됩니다. 그리고 네, 하위 쿼리를 사용하고 있으므로 외부 쿼리에서 ON 또는 USING 절에있는 열 별칭을 사용할 수 있습니다.

USING 대신 ON을 사용하고 테이블 이름이나 테이블 별칭을 사용하여 각 열이 참조하는 테이블이나 하위 쿼리를 지정하는 것이 좋습니다.

ON을 사용하고 어떤 테이블을 참조하는지 명시 적으로 표시하면 코드를 더 읽기 쉽도록 만듭니다. 특히 여러 조인을 사용하는 경우를 고려하십시오.

JOIN (SELECT nid, sid, name AS max_name from products WHERE guideline='1' group by nid, sid) AS at1 
     ON at1.nid = products.nid and at1.sid = products.sid 
JOIN (SELECT id as subid, blockid as id from subscribe WHERE userid='1') AS sub 
     ON sub.id = products.id 
:

다음은 쿼리를 사용하여 예제