2014-12-01 1 views
0

대학 지정을위한 Oracle 응용 프로그램을 구축 중이며 하위 쿼리를 수행하여 하위 열을 반환하려고 시도 할 때 매우 이상한 동작이 발생합니다. 해당 이미지를 가져 오지 않고 DISTINCT 저장소를 선택하십시오.예기치 않은 식별자 오류가 발생하는 JOIN에 대한 Oracle 하위 쿼리

내 이미지는 BLOB 형식으로 저장해야하기 때문에 (할당 지정으로 인해) 먼저 고유 한 저장소 항목을 선택하고 관련 BLOB 축소판을 다시 가져 오려고합니다. 그 가게를 위해.

는 아래 내 접근

: 나에게

SELECT DISTINCT 
     stores.store_id, 
     stores.name, 
     stores.description, 
     stores.postcode 
    FROM stores 
    INNER JOIN 
    (
      SELECT 
      dbms_lob.getlength(store_images.thumbnail) AS thumbnail 
      FROM store_images 
    ) store_images ON stores.store_id = store_images.store_id 
WHERE stores.store_id = 2; 

이 모든 것이 잘 보인다 그러나 나는

ORA-00904: "STORE_IMAGES"."STORE_ID": invalid identifier

나는이 오류가 무엇을 의미하는지 알고있는 오류를 얻을 수 있지만, 내 문제의 맥락에서 그것을 나에게 조금 이해가되지 않는다. 나는 스키마와 외국 키와 기본 키 이름이 똑같이 일치하는지 세 번 확인했다.

하위 쿼리 구성 요소를 제거하면 쿼리가 올바르게 컴파일됩니다. 여기서 문제는 무엇입니까?

+2

subselect 문에'store_id'를 포함해야합니까? 포함되지 않은 필드에서 검색하려고합니다. – Destruktor

답변

3

당신은 인라인 뷰에 store_images.store_id를 꺼내해야합니다

SELECT DISTINCT 
     stores.store_id, 
     stores.name, 
     stores.description, 
     stores.postcode 
FROM stores 
INNER JOIN store_images 
ON stores.store_id = store_images.store_id 
AND stores.store_id = 2; 
: 당신이 당신의 인라인 뷰에서 선택하지 않는 때문에,

INNER JOIN 
    (
      SELECT 
      dbms_lob.getlength(store_images.thumbnail) AS thumbnail, 
      store_images.store_id 
      FROM store_images 
    ) store_images ON stores.store_id = store_images.store_id 

을 덧붙여, 명세서은 단축 될 수있다

+0

Oracle APEX를 사용하여 응용 프로그램을 빌드하고 있으므로 축소판 필드를 사용하여 양식을 작성해야하므로 단축 할 수 없습니다. 하위 쿼리를 수행하지 않으면 최상위 쿼리에 BLOB 데이터가있을 때 DISTINCT select를 수행 할 수 없으므로 APEX에서 오류가 발생합니다. – Alex

+0

OK하지만 질문에 제시된 쿼리는 BLOB를 선택하지 않습니다. 하나가 단축 될 수 있습니다. 내 첫 제안은 효과가 있습니까? –

+0

네, 첫 번째 해결책은 제 문제를 고쳤습니다 - 고마워요. – Alex

0
SELECT DISTINCT 
     stores.store_id, 
     stores.name, 
     stores.description, 
     stores.postcode, 
     dbms_lob.getlength(store_images.thumbnail) AS thumbnail 
FROM stores,store_images 
where stores.store_id = store_images.store_id 
AND stores.store_id = 2; 
+0

개그! 명시 적'join' 문법을 배우십시오. –

+0

고맙습니다. 알아 두겠습니다. – sunysen