Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / SQLite [игнор отключен] [закрыт для гостей] / поиск и замена / 6 сообщений из 6, страница 1 из 1
01.06.2011, 20:38
    #37290150
D1eg0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поиск и замена
Добрый вечер!
Есть две таблицы t1:name,name_translate и t2:part_name,translate

Есть запрос возвращающий записи из таблицы t1+столбец translate из t2, если part_name является частью name


select t1.name, t2.translate from t1
join t2 on t1.name like ('%'||t2.part_name||'%')

Потом я задумал в столбце name(t1) заменить встречающийся part_name(t2) на translate(t2) и полученный результат записывать в name_translate(t1)

Думал, в итогу пока надумал только вот так, но там все записи из t1 имели одинаковые поля name_translate

update t1
set name_translate = replace((select t1.name from t1,t2 where
t1.name like ('%'||t2.part_name||'%')),(select t2.part_name from t1,t2 where
t1.name like ('%'||t2.part_name||'%')),(select t2.translate from t1,t2 where
t1.name like ('%'||t2.part_name||'%')))


В чём косяк?
...
Рейтинг: 0 / 0
01.06.2011, 21:01
    #37290176
Stupid_BOT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поиск и замена
D1eg0,
Код: plaintext
1.
update (t1 join t2 on t1.name like ('%'||t2.part_name||'%') ) 
set t1.name_translate=replace(t1.name,t2.part_name,t2.translate);
...
Рейтинг: 0 / 0
01.06.2011, 21:47
    #37290224
D1eg0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поиск и замена
Stupid_BOT,

Смысл понял, но sqliteman выдаёт - Ошибка в запросе; near "(": syntax error Unable to execute statement

join проверил - работает, в чём может быть дело?
...
Рейтинг: 0 / 0
01.06.2011, 22:29
    #37290284
Stupid_BOT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поиск и замена
D1eg0,
ошибка синтаксиса , - не умеет sqlite соединенные таблицы апдейтить :( А жаль.
Ничего лучшего, чем мат в три хода в голову не приходит.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
--NB: в таблице t1 должен быть первичный ключ/уникальный индекс по полю name

create temp table tt_1287u2 
as select t1.name, replace(t1.name,t2.part_name,t2.translate) name_translate
from t1 join t2 on t1.name like ('%'||t2.part_name||'%');

replace into t1(name, name_translate)
select name, name_translate from tt_1287u2;

drop table tt;

--PS: надеюсь, перед "испытаниями" Вы сделали бэкап базы.

...
Рейтинг: 0 / 0
01.06.2011, 22:36
    #37290293
Stupid_BOT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поиск и замена
... возможно я "дую на воду" и жизнеспособной окажется такая конструкция:
Код: plaintext
1.
2.
3.
replace into t1(name, name_translate)
select t1.name, replace(t1.name,t2.part_name,t2.translate) name_translate
from t1 join t2 on t1.name like ('%'||t2.part_name||'%');
...
Рейтинг: 0 / 0
03.06.2011, 15:54
    #37293742
D1eg0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поиск и замена
Stupid_BOT,

добавил столбец id как первичный ключ в таблицу t1, использовал твой второй скрипт и всё получилось. Большое спасибо!
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / поиск и замена / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]