Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как лучше? / 25 сообщений из 67, страница 1 из 3
04.07.2017, 13:23
    #39482370
Abraziv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше?
Добрый день. Есть большой список значений полей хранящийся в файле. Необходимо осуществить поиск в большой БД совпадений из этого списка. Если удастся найти, то необходимо сделать пометку в найденной записи. Как оптимальней сделать, sql (update по select) запрос для каждого значения из списка или же доставать каждую запись (программно) и сравнивать со списком ?
...
Рейтинг: 0 / 0
04.07.2017, 13:29
    #39482374
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше?
загнать список в таблицу БД, далее средствами SQL сравнивать/апдейтить.
Вопрос-то в чем?
...
Рейтинг: 0 / 0
04.07.2017, 13:35
    #39482380
Abraziv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше?
Загонять ничего в БД нельзя.
Вопрос в том, как оптимальнее сделать, делать для каждого значения из списка SQL запрос
или перебирать все записи (программно на сях например) и каждую запись сравнивать со списком и если найдётся делать пометку ???
...
Рейтинг: 0 / 0
04.07.2017, 13:35
    #39482381
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше?
AbrazivКак оптимальней сделать

Это зависит от величины списков, доступных ресурсов (ОЗУ) и кривизны рук программиста.
Судя по остальным твоим топикам - тебе лучше последовать совету Ивана.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.07.2017, 13:42
    #39482386
Abraziv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше?
Модератор: Полегче на поворотах.
...
Рейтинг: 0 / 0
04.07.2017, 14:15
    #39482408
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше?
Два списка можно столкнуть средствами SQL, в этом языке все для этого есть. Можно столкнуть на любом языке программирования, было бы желание. В случае SQL это как крупнопанельное домостроительство, Си в данном контексте как куча песка, куча цемента и мастерок.

AbrazivЗагонять ничего в БД нельзя.Всегда можно загнать в третью БД на третьем хосте, вопрос опять таки в желании.
...
Рейтинг: 0 / 0
04.07.2017, 14:28
    #39482413
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше?
AbrazivЗагонять ничего в БД нельзя.

Что мешает? Религия?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.07.2017, 14:54
    #39482437
Abraziv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше?
Понял, всем спасибо. Попробую создать дополнительную таблицу, загнать туда и делать на запросах.
...
Рейтинг: 0 / 0
07.07.2017, 11:33
    #39484361
Abraziv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше?
Походу дела столкнулся с проблемой.
Имеется две таблицы, t1 и t2, нужно обновить поле f1 в таблице t1 значением f1 таблицы t2, если выполняется условие t1.f2 = t2.f2 OR t1.f3 = t2.f3 OR t1.f4 = t2.f4, не получается это сделать из-за ограниченности возможностей SQL interbase. Есть идеи?
...
Рейтинг: 0 / 0
07.07.2017, 11:42
    #39484369
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше?
Можно пробежаться по всем строкам и case-ом выбирать значение из той или иной таблицы.
...
Рейтинг: 0 / 0
07.07.2017, 11:43
    #39484370
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше?
Abraziv,

напомни, какая у тебя версия.
...
Рейтинг: 0 / 0
07.07.2017, 11:44
    #39484371
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше?
Abraziv,

если я правильно понял то тебе поможет MERGE
...
Рейтинг: 0 / 0
07.07.2017, 11:51
    #39484377
Abraziv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше?
wadman Можно пробежаться по всем строкам и case-ом выбирать значение из той или иной таблицы.
Хочется сделать средствами SQL.
WildSery напомни, какая у тебя версия.
2009
Симонов Денис если я правильно понял то тебе поможет MERGE
Понял, спасибо попробую глянуть в этом направлении.
...
Рейтинг: 0 / 0
07.07.2017, 11:51
    #39484378
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше?
AbrazivХочется сделать средствами SQL.
А, ну да...
...
Рейтинг: 0 / 0
07.07.2017, 11:54
    #39484384
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше?
Abraziv,

не глянешь. Нет в IB оператора MERGE
...
Рейтинг: 0 / 0
07.07.2017, 11:58
    #39484390
Abraziv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше?
в IB них нет.
...
Рейтинг: 0 / 0
07.07.2017, 12:30
    #39484423
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше?
AbrazivПоходу дела столкнулся с проблемой.
Имеется две таблицы, t1 и t2, нужно обновить поле f1 в таблице t1 значением f1 таблицы t2, если выполняется условие t1.f2 = t2.f2 OR t1.f3 = t2.f3 OR t1.f4 = t2.f4, не получается это сделать из-за ограниченности возможностей SQL interbase. Есть идеи?

а что такое не прокатит

Код: sql
1.
2.
3.
update t1
  set t1.f1=(select t1.f2 from t2 where ... t1.f2 = t2.f2 OR t1.f3 = t2.f3 OR  t1.f4 = t2.f4)
where singular(select t1.f2 from t2 where ... t1.f2 = t2.f2 OR t1.f3 = t2.f3 OR  t1.f4 = t2.f4)
...
Рейтинг: 0 / 0
07.07.2017, 12:33
    #39484429
Abraziv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше?
m7m (select t1.f2 from t2 where ... t1.f2 = t2.f2 OR t1.f3 = t2.f3 OR t1.f4 = t2.f4)
SELECT может вернуть несколько записей в таком случае. Это тоже необходимо учесть.
...
Рейтинг: 0 / 0
07.07.2017, 12:38
    #39484432
Abraziv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше?
т.е. set t1.f1= (несколько записей) не прокатывает, я тоже так пробовал и на этом остановился.
...
Рейтинг: 0 / 0
07.07.2017, 12:38
    #39484433
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше?
Abrazivm7m (select t1.f2 from t2 where ... t1.f2 = t2.f2 OR t1.f3 = t2.f3 OR t1.f4 = t2.f4)
SELECT может вернуть несколько записей в таком случае. Это тоже необходимо учесть.

1. в том что я написал не может
2. ну как только откроешь секрет, что при этом надо делать, то может быть, кто-то что-то и напишет
...
Рейтинг: 0 / 0
07.07.2017, 12:46
    #39484437
Abraziv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше?
В случает если select t1.f2 from t2 where ... t1.f2 = t2.f2 OR t1.f3 = t2.f3 OR t1.f4 = t2.f4 возвращает несколько значений, необходимо сделать пометку во всех соответствующих записях в поле f1 таблицы t1 соответствуюшим полем f2 таблицы t1.
...
Рейтинг: 0 / 0
07.07.2017, 12:53
    #39484445
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше?
Abraziv,

Что такое "пометка"? До этого была версия, что туда t2.f1 (какого типа?) нужно запихать.
...
Рейтинг: 0 / 0
07.07.2017, 12:54
    #39484446
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше?
AbrazivВ случает если select t1.f2 from t2 where ... t1.f2 = t2.f2 OR t1.f3 = t2.f3 OR t1.f4 = t2.f4 возвращает несколько значений, необходимо сделать пометку во всех соответствующих записях в поле f1 таблицы t1.

Код: sql
1.
2.
3.
4.
5.
6.
7.
update t1
  set t1.f1=(select t1.f2 from t2 where ... t1.f2 = t2.f2 OR t1.f3 = t2.f3 OR  t1.f4 = t2.f4)
where singular(select t1.f2 from t2 where ... t1.f2 = t2.f2 OR t1.f3 = t2.f3 OR  t1.f4 = t2.f4)

update t1
  set t1.f1=Здесь_Наша_Пометка
where (select count(*) from t2 where ... t1.f2 = t2.f2 OR t1.f3 = t2.f3 OR  t1.f4 = t2.f4) > 2

или может быть вот так,

Код: sql
1.
2.
3.
4.
5.
6.
7.
update t1
  set t1.f1=(select distinct t1.f2 from t2 where ... t1.f2 = t2.f2 OR t1.f3 = t2.f3 OR  t1.f4 = t2.f4)
where singular(select distinct t1.f2 from t2 where ... t1.f2 = t2.f2 OR t1.f3 = t2.f3 OR  t1.f4 = t2.f4)

update t1
  set t1.f1=Здесь_Наша_Пометка
where (select count(distinct t1.f2) from t2 where ... t1.f2 = t2.f2 OR t1.f3 = t2.f3 OR  t1.f4 = t2.f4) > 2


ну а может быть еще как-то
...
Рейтинг: 0 / 0
07.07.2017, 12:59
    #39484455
Abraziv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше?
Да t2.f1, необходимо запихать. Пометка это значение t2.f1, извиняюсь если сбил с толку.
m7mupdate t1
set t1.f1=(select t1.f2 from t2 where ... t1.f2 = t2.f2 OR t1.f3 = t2.f3 OR t1.f4 = t2.f4)
where singular(select t1.f2 from t2 where ... t1.f2 = t2.f2 OR t1.f3 = t2.f3 OR t1.f4 = t2.f4)

update t1
set t1.f1=Здесь_Наша_Пометка
where (select count(*) from t2 where ... t1.f2 = t2.f2 OR t1.f3 = t2.f3 OR t1.f4 = t2.f4) > 2
или может быть вот так,

update t1
set t1.f1=(select distinct t1.f2 from t2 where ... t1.f2 = t2.f2 OR t1.f3 = t2.f3 OR t1.f4 = t2.f4)
where singular(select distinct t1.f2 from t2 where ... t1.f2 = t2.f2 OR t1.f3 = t2.f3 OR t1.f4 = t2.f4)

update t1
set t1.f1=Здесь_Наша_Пометка
where (select count(distinct t1.f2) from t2 where ... t1.f2 = t2.f2 OR t1.f3 = t2.f3 OR t1.f4 = t2.f4) > 2

ну а может быть еще как-то

Спасибо попробую, правда мне кажется будут пропуски.
...
Рейтинг: 0 / 0
07.07.2017, 13:09
    #39484474
Abraziv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше?
SINGULAR проверяет что запрос возвращает одну запись, и в этом случае возвращает TRUE.
т.е. игнорируется случаи когда в t1 имеются несколько t1.f2 = t2.f2 OR t1.f3 = t2.f3 OR t1.f4 = t2.f4 из t2
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как лучше? / 25 сообщений из 67, страница 1 из 3
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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