如何在blob列的oracle中连接两个表?

时间:2016-03-13 07:17:05

标签: oracle oracle8i

如何在blob列上的oracle中连接两个表

执行此查询时“SQL命令未正确结束”错误消息出现

select name,photo 
from tbl1 join tbl2 on tbl1.photo = tbl2.photo

2 个答案:

答案 0 :(得分:2)

首先,有一个设计,你将相同的blob存储在两个不同的表中并且非常奇怪,你想要加入一个图像,这似乎是非常奇怪的。这似乎不是一个明智的设计。

您已为Oracle 8i标记了此内容。这是Oracle的一个古老版本,它不支持SQL 99连接语法。您需要在where子句中进行连接。您无法直接测试两个blob值之间的相等性。但您可以使用dbms_lob.compare

select name,photo 
  from tbl1,
       tbl2 
 where dbms_lob.compare(tbl1.photo, tbl2.photo) = 0

从性能角度来看,这将是相当可怕的。您必须将photo中的每个tbl1photo中的每个tbl2进行比较,并且比较两个龙头并不是特别快。如果您真的想要比较图像,那么最好计算一个哈希值,将其存储在索引的单独列中,然后比较哈希值而不是直接比较图像。

答案 1 :(得分:0)

代码:

SELECT 
    name, photo
FROM 
    tbl1 T1
INNER JOIN 
    tbl2 T2
ON
    T1.photo = T2.photo


如果运行不正常,则必须在TABLE结构中进行一些更改:
1。 ...添加一个名为IMAGES的新TABLE列(image_id,image_blob)
2。 ......然后你必须改变: tbl1's blobtbl2's blob到image_id
3。 ...然后根据名为image_id的JOIN执行COLUMN

注意:您无法对GROUP BY, JOIN(any JOIN), CONCAT数据类型

执行BLOB次操作

建议:将路径保存到数据库中的图像并将图像保存在该服务器目录的某处(因为在数据库中保存BLOB中的图像不是一个好习惯... ..为了确保我所说的VISIT HERE