как объединить две таблицы в оракуле в столбце blob?

как объединить две таблицы в оракуле в столбце blob

при выполнении этого запроса появляется сообщение об ошибке «Команда SQL неправильно завершена»

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

person faraaz    schedule 13.03.2016    source источник
comment
Вы действительно используете старую, устаревшую и неподдерживаемую версию 8i? Если да, то эта версия не поддерживает явный синтаксис JOIN. Но это ужасный дизайн в первую очередь   -  person a_horse_with_no_name    schedule 13.03.2016


Ответы (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 из tbl1 с каждой photo из tbl2, а сравнение двух лепестков не особенно быстрое. Если вы действительно намерены сравнивать изображения, вам, вероятно, лучше вычислить хэш, сохранить его в отдельном индексированном столбце, а затем сравнить хэши, а не сравнивать изображения напрямую.

person Justin Cave    schedule 13.03.2016

Код:

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


Если все работает неправильно, вам придется внести несколько изменений в структуру TABLE:
1. ...Добавить новый TABLE с именем IMAGES со столбцами (image_id, image_blob) < br>2. ...И тогда вам придется изменить: tbl1's blob и tbl2's blob на image_id
3. ...Затем выполните JOIN на основа COLUMN с именем image_id


ПРИМЕЧАНИЕ. Вы не можете выполнять GROUP BY, JOIN(any JOIN), CONCAT операций с BLOB типом данных.


ПРЕДЛОЖЕНИЕ: сохраните пути к изображениям в БАЗЕ ДАННЫХ и сохраните ИЗОБРАЖЕНИЯ где-нибудь в каталоге этого СЕРВЕРА (поскольку сохранение изображений в BLOB в БАЗЕ ДАННЫХ не рекомендуется..... Чтобы убедиться, что я сказал ПОСЕТИТЕ ЗДЕСЬ)

person Asif Mehmood    schedule 13.03.2016
comment
Oracle 8i не поддерживал оператор JOIN - person a_horse_with_no_name; 13.03.2016