关于JOIN的Oracle子查询抛出意外标识符错误

时间:2014-12-01 14:12:18

标签: sql oracle

我正在为我的大学任务构建一个Oracle应用程序,当我尝试执行子查询以返回另一个列以允许我选择DISTINCT存储而不获取其图像时,我遇到了一些非常奇怪的行为。

我需要这样做的原因是因为我的Image需要以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 个答案:

答案 0 :(得分:3)

您需要在内联视图中提取store_images.store_id:

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

顺便说一句,由于您没有从内联视图中进行选择,因此您的陈述可缩短为:

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;

答案 1 :(得分: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;