2011-11-29 4 views
1

을 던지고있다.내가 두 테이블이 오류

tableLocation은 해당 페이지의 콘텐츠가 저장되는 곳입니다. 어쨌든 사이트의 여러 영역이 있습니다.

"tableLocation"에서 데이터를 가져와 JOIN을 수행해야하므로 카탈로그 및 필요한 테이블에 필요한 모든 데이터를 가져올 수 있습니다. 물론 "tableLocation"데이터가 없으면 어떤 테이블을 조사해야하는지 알지 못합니다. 내가 두 번째는 그것이 작동하는 특정 tableLocation와 SELECT 교체하는 경우 나 오류를 받고 있어요

SELECT p.pageID,p.tableLocation,p.pageName 
FROM pageCatalog p 
INNER JOIN 
(SELECT tableLocation 
FROM pageCatalog 
WHERE pageName='PAGENAME') d 
ON (p.pageID = d.pageID) 
WHERE p.pageName='PAGENAME' 

, "잘못된 열 이름 '페이지 id'"

: 나는 다음과 같은 SQL 문을 사용하려고 해요. 그래서 오류가있는 "내부 조인 (선택 ..."하지만 무슨 문제인지 확실하지 않아요. 어떤 아이디어?

------------- EDIT --- ------- 더 상세하게는 :

예 pageCatalog이 예에서이

pageID tableLocation pageName 
    167  tableA   page1 
    12  tableB   page2 
    250  tableC   page3 

을 갖는 I 3 개 테이블이 I 테이블 * 데이터를 가져와해야하지만 먼저 tableLocation 필요하다.. tableB에는 pageTitle이 있습니다. 두 테이블을 결합하여 데이터를 가져와야합니다.

+0

나는 이미 p.tableLocation을 통해 "tableLocation"을 얻고 있음을 알고있다. 별칭을 테이블 이름으로 사용했지만 다른 오류가 발생했습니다. – dcp3450

+1

그 자체로 테이블에 가입하려고하는 것처럼 보이는 것은 맞습니까? 이 일을 통해 무엇을 성취하려고합니까? 또한 하위 쿼리에서 pageID 열을 선택하지 않아 유효하지 않은 열 이름 오류가 발생하는 이유가있을 수 있습니다. –

+1

Anders에게 감사드립니다. 그 포맷에 대해 죄송합니다. – dcp3450

답변

3
(SELECT tableLocation 
FROM pageCatalog 
WHERE pageName='PAGENAME') AS d 

나는 pageID라는 이름의 열이 표시되지 않습니다,하지만 당신은

d.pageID 당신이이 일을 찾으셨습니까 참조 : 더 d.pageID 없습니다

(SELECT pageID 
FROM pageCatalog 
WHERE pageName='PAGENAME') AS d 
1

. 하위 쿼리는 d의 별칭이 하나의 열만있는 tableLocation입니다. 다음과 같이 수정하십시오.

SELECT p.pageID,p.tableLocation,p.pageName 
FROM pageCatalog p 
INNER JOIN 
(SELECT pageID, tableLocation 
FROM pageCatalog 
WHERE pageName='PAGENAME') d 
ON (p.pageID = d.pageID) 
WHERE p.pageName='PAGENAME' 
1

하위 쿼리에 단지 pageID이 없습니다. 당신은 단지 tableLocation 열을 선택 SELECT 당신의 내면에서

SELECT p.pageID,p.tableLocation,p.pageName 
FROM pageCatalog p 
INNER JOIN 
(SELECT tableLocation, pageID 
FROM pageCatalog 
WHERE pageName='PAGENAME') d 
ON (p.pageID = d.pageID) 
WHERE p.pageName='PAGENAME' 
2

,하지만 당신은 d.pageID으로 pageID 열을 참조하려고이로 변경합니다. 내부 SELECT에 해당 열을 추가하십시오 :

SELECT p.pageID,p.tableLocation,p.pageName 
FROM pageCatalog p 
INNER JOIN 
(SELECT tableLocation, pageID 
FROM pageCatalog 
WHERE pageName='PAGENAME') d 
ON (p.pageID = d.pageID) 
WHERE p.pageName='PAGENAME' 
1

귀하의 부속 선택은 pageID를 포함하지 않는 d 별칭으로.

에 그 변경 시도 :

INNER JOIN 
(SELECT tableLocation, pageID 
FROM pageCatalog 
WHERE pageName='PAGENAME') d 
ON (p.pageID = d.pageID) 
1

을 당신이 -

(SELECT tableLocation FROM pageCatalog WHERE pageName='PAGENAME') d 

ON (p.pageID = d.pageID) 

d 표는이 시점에서 열 tableLocation 포함됩니다.

1

하위 쿼리에서 pageID를 선택하지 않았습니다. 이 시도 :

SELECT p.pageID,p.tableLocation,p.pageName 
FROM pageCatalog p 
INNER JOIN 
(SELECT tableLocation, pageID 
FROM pageCatalog 
WHERE pageName='PAGENAME') d 
ON (p.pageID = d.pageID) 
WHERE p.pageName='PAGENAME' 

또는 더 나은 아직, 모든 하위 쿼리를 사용하지 않는 :

SELECT p.pageID, p.tableLocation, p.pageName 
FROM pageCatalog p 
INNER JOIN pageCatalog d 
ON p.pageID = d.pageID 
WHERE p.pageName='PAGENAME' 
AND d.pageName = 'PAGENAME'; 
0

나는 단지 한 두 개의 쿼리 문을. 먼저 tableLocation을 변수로 저장하고 두 번째 쿼리는 두 번째 SELECT를 변수로 대체합니다. 나는 두 가지 쿼리를 피하고 싶었지만 길을 찾지 못했습니다.