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

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

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

Что мешает? Религия?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как лучше?
    #39482437
Abraziv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял, всем спасибо. Попробую создать дополнительную таблицу, загнать туда и делать на запросах.
...
Рейтинг: 0 / 0
Как лучше?
    #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
Как лучше?
    #39484369
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно пробежаться по всем строкам и case-ом выбирать значение из той или иной таблицы.
...
Рейтинг: 0 / 0
Как лучше?
    #39484370
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Abraziv,

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

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

не глянешь. Нет в IB оператора MERGE
...
Рейтинг: 0 / 0
Как лучше?
    #39484390
Abraziv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в IB них нет.
...
Рейтинг: 0 / 0
Как лучше?
    #39484423
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
Как лучше?
    #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
Как лучше?
    #39484432
Abraziv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. set t1.f1= (несколько записей) не прокатывает, я тоже так пробовал и на этом остановился.
...
Рейтинг: 0 / 0
Как лучше?
    #39484433
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
Как лучше?
    #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
Как лучше?
    #39484445
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Abraziv,

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


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