|
Как лучше?
|
|||
---|---|---|---|
#18+
Добрый день. Есть большой список значений полей хранящийся в файле. Необходимо осуществить поиск в большой БД совпадений из этого списка. Если удастся найти, то необходимо сделать пометку в найденной записи. Как оптимальней сделать, sql (update по select) запрос для каждого значения из списка или же доставать каждую запись (программно) и сравнивать со списком ? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2017, 13:23 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
загнать список в таблицу БД, далее средствами SQL сравнивать/апдейтить. Вопрос-то в чем? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2017, 13:29 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Загонять ничего в БД нельзя. Вопрос в том, как оптимальнее сделать, делать для каждого значения из списка SQL запрос или перебирать все записи (программно на сях например) и каждую запись сравнивать со списком и если найдётся делать пометку ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2017, 13:35 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
AbrazivКак оптимальней сделать Это зависит от величины списков, доступных ресурсов (ОЗУ) и кривизны рук программиста. Судя по остальным твоим топикам - тебе лучше последовать совету Ивана. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2017, 13:35 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Модератор: Полегче на поворотах. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2017, 13:42 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Два списка можно столкнуть средствами SQL, в этом языке все для этого есть. Можно столкнуть на любом языке программирования, было бы желание. В случае SQL это как крупнопанельное домостроительство, Си в данном контексте как куча песка, куча цемента и мастерок. AbrazivЗагонять ничего в БД нельзя.Всегда можно загнать в третью БД на третьем хосте, вопрос опять таки в желании. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2017, 14:15 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
AbrazivЗагонять ничего в БД нельзя. Что мешает? Религия?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2017, 14:28 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Понял, всем спасибо. Попробую создать дополнительную таблицу, загнать туда и делать на запросах. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2017, 14:54 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Походу дела столкнулся с проблемой. Имеется две таблицы, t1 и t2, нужно обновить поле f1 в таблице t1 значением f1 таблицы t2, если выполняется условие t1.f2 = t2.f2 OR t1.f3 = t2.f3 OR t1.f4 = t2.f4, не получается это сделать из-за ограниченности возможностей SQL interbase. Есть идеи? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 11:33 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Можно пробежаться по всем строкам и case-ом выбирать значение из той или иной таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 11:42 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Abraziv, напомни, какая у тебя версия. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 11:43 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Abraziv, если я правильно понял то тебе поможет MERGE ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 11:44 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
wadman Можно пробежаться по всем строкам и case-ом выбирать значение из той или иной таблицы. Хочется сделать средствами SQL. WildSery напомни, какая у тебя версия. 2009 Симонов Денис если я правильно понял то тебе поможет MERGE Понял, спасибо попробую глянуть в этом направлении. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 11:51 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
AbrazivХочется сделать средствами SQL. А, ну да... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 11:51 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Abraziv, не глянешь. Нет в IB оператора MERGE ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 11:54 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
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.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 12:30 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
m7m (select t1.f2 from t2 where ... t1.f2 = t2.f2 OR t1.f3 = t2.f3 OR t1.f4 = t2.f4) SELECT может вернуть несколько записей в таком случае. Это тоже необходимо учесть. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 12:33 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
т.е. set t1.f1= (несколько записей) не прокатывает, я тоже так пробовал и на этом остановился. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 12:38 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Abrazivm7m (select t1.f2 from t2 where ... t1.f2 = t2.f2 OR t1.f3 = t2.f3 OR t1.f4 = t2.f4) SELECT может вернуть несколько записей в таком случае. Это тоже необходимо учесть. 1. в том что я написал не может 2. ну как только откроешь секрет, что при этом надо делать, то может быть, кто-то что-то и напишет ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 12:38 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
В случает если select t1.f2 from t2 where ... t1.f2 = t2.f2 OR t1.f3 = t2.f3 OR t1.f4 = t2.f4 возвращает несколько значений, необходимо сделать пометку во всех соответствующих записях в поле f1 таблицы t1 соответствуюшим полем f2 таблицы t1. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 12:46 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Abraziv, Что такое "пометка"? До этого была версия, что туда t2.f1 (какого типа?) нужно запихать. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 12:53 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
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.
или может быть вот так, Код: sql 1. 2. 3. 4. 5. 6. 7.
ну а может быть еще как-то ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 12:54 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Да 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 ну а может быть еще как-то Спасибо попробую, правда мне кажется будут пропуски. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 12:59 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
SINGULAR проверяет что запрос возвращает одну запись, и в этом случае возвращает TRUE. т.е. игнорируется случаи когда в t1 имеются несколько t1.f2 = t2.f2 OR t1.f3 = t2.f3 OR t1.f4 = t2.f4 из t2 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 13:09 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
хранимую процедуру написать предлагали уже? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 13:12 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Ivan_Pisarevsky, предлагали, но автор хочет на чистом SQL. Поэтому понаблюдаем за проктологами ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 13:13 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Ivan_Pisarevsky, - фу! (с)бондарчук ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 13:13 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Хранимая процедура хороший вариант, кто нибудь может накидать пример пожалуйста? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 13:19 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Симонов ДенисIvan_Pisarevsky, предлагали, но автор хочет на чистом SQL. Поэтому понаблюдаем за проктологами Это не проктология, а просто криво спроектированная база. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 13:25 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Siemargl Прочитай тему с начала. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 13:31 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
ну в принципе цикл for в процедуре, так понятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 13:37 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Симонов ДенисIvan_Pisarevsky, предлагали, но автор хочет на чистом SQL. Поэтому понаблюдаем за проктологами чую что и меня туда причислил ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 13:56 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
AbrazivЗагонять ничего в БД нельзя Почему? Создать временную таблицу, загнать данные, сделать всё необходимое и дропнуть её потом - это не всё религия не позволяет сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 14:12 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
ТС'у надо это: 20320596 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 14:19 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
AbrazivПометка это значение t2.f1И что должно тогда вставиться, если t2.f1 несколько разных? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 15:41 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Да я уже понял, как сделать. Через цикл FOR в хранимой процедуре. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 16:39 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Abraziv, всё равно хрень выйдет. Многократно апдейтить одну и ту же запись разными значениями это плохо. В данном случае всё равно что сыграть в рулетку ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 16:41 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Симонов Денис, Как быть? ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 16:44 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Abraziv, это тебе решать. У тебя условие довольно странное: если совпадает хотя бы одно поле. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 16:51 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Согласен, спасибо большое всем за помощь. Классный сайт, всегда помогают путёвыми советами. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2017, 16:57 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Abraziv, Если ты из нескольких найденных не знаешь, какое ставить, то хотя бы приоритет выставил. Например, если оба совпадают, то 1, если совпадает только первое, то 2, если совпадает второе, то 3. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2017, 09:07 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Если ли возможность в SQL interbase выполнять сравнение полей в WHERE если поля не нулевые (IS NOT NULL???) без AND ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2017, 14:19 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Abraziv, Без какого AND? Моя твоя не понимай. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2017, 14:27 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
SELECT * FROM table WHERE table.a = b AND (table.a <> NULL) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2017, 14:29 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
AbrazivЕсли ли возможность в SQL interbase выполнять сравнение полей в WHERE если поля не нулевые (IS NOT NULL???) без AND ??? Есть. Если, например, сложить два поля, то результат будет null, если хотя бы одно из полей было null. Или "склеить": Код: sql 1.
А зачем такие глупости? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2017, 14:36 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Abraziv Код: sql 1.
А зачем? Это ж то же самое, что и Abraziv Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2017, 14:38 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
неправильно написал, надо SELECT * FROM table1, table2 WHERE table1.a = table2.a AND (table2.a <> NULL) так не получится where (fq || f2 || f3 || f4 || f5) is not null нужно чтобы условие выполнялось, если хотя бы одно || выполняется для не нулевого table2.a ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2017, 14:43 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
13.07.2017 14:19, Abraziv пишет: > Если ли возможность в SQL interbase выполнять сравнение полей в WHERE если поля не нулевые (IS NOT NULL???) без AND ??? если хотя бы одно из полей (или оба сразу) NULL, то результат сравнения будет FALSE Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2017, 14:44 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Abrazivнеправильно написал, надо SELECT * FROM table1, table2 WHERE table1.a = table2.a AND (table2.a <> NULL) ... Ну и что? Код: sql 1.
- это то же самое, что и Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2017, 14:47 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Мимопроходящий13.07.2017 14:19, Abraziv пишет: > Если ли возможность в SQL interbase выполнять сравнение полей в WHERE если поля не нулевые (IS NOT NULL???) без AND ??? если хотя бы одно из полей (или оба сразу) NULL, то результат сравнения будет FALSE Мне уже кажется, что "они сами не знают, что они хочут"... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2017, 14:48 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
13.07.2017 14:48, чччД пишет: > Мне уже кажется, что "они сами не знают, что они хочут"... +1 или не могут изъяснить свои желанья Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2017, 14:50 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
согласен!!! но, нужно несколько условий SELECT * FROM table1, table2 WHERE (table1.a = table2.a AND (table2.a <> NULL)) OR (table1.b = table2.b AND (table2.b <> NULL)) OR (table1.c = table2.c AND (table2.c <> NULL)) и нужно понимать, что table1.a table1.b table1.c также может быть NULL, а NULL = NULL равно TRUE ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2017, 14:50 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Abrazivи нужно понимать это.... SELECT * FROM table1, table2 WHERE (table1.a = table2.a) это неявный join, которому соответствует inner join, поэтому в результат не попадают ни table1.a is null, ни table2.a is null. Abraziv а NULL = NULL равно TRUE ШТО? :-) null <> null, по определению. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2017, 14:53 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
13.07.2017 14:50, Abraziv пишет: > и нужно понимать, что table1.a table1.b table1.c также может быть NULL, > а NULL = NULL равно TRUE а в ухо?! (С) сравнение NULL-а с чем угодно, в том числе с другим NULL-ом всегда даёт FALSE Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2017, 14:53 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
для разных случаев есть разные операторы. "=" "!=" "is not distinct from" "is distinct from" разные и дают разный результат на выходе при одинаковых входных данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2017, 14:59 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Ivan_Pisarevsky, нету в IB is [not] distinct from, поэтому автору придётся кушать кактус ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2017, 15:01 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
да, еще можно применить coalesce(table1.b, -1) "-1" выбрано из предположения, что соединение идет по положительным значениям и отрицательных нет по административным соображениям. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2017, 15:02 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Симонов Денисавтору придётся кушать кактусну да, ну да... из некоторых кактусов, говорят, неплохая самогонка выходит. а коалески тоже нэма? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2017, 15:04 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Ivan_Pisarevsky, вроде появилась ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2017, 15:07 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Abraziv, Инструменты найдутся всегда. Главное - понять, что же тебе надо. Поскольку пока что все твои примеры ничего не объясняют. Если table1.a = table2.a, то в каком случае запись не должна попадать в выборку? По NULL'ам она и так не соединится, ничего тут дополнительно сравнивать не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2017, 15:27 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Есть две таблицы. Нужно сравнить есть ли совпадения записей с указанными полями в этих таблицах, если есть, то сделать пометку в поле таблицы 1 значением из поля таблицы 2. В результате сравнения в таблице 1 может быть найдено несколько совпадений для одной записи из таблицы 2. Моё решение: хранимая процедура с двумя FOR. Что тут не понятно? Я же 300 раз писал уже. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2017, 10:48 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Abraziv, Тебя совсем о другом спрашивали. Входное условие, что отношение по записям Т1:Т2 как N:1, ты только сейчас ввёл, и утверждаешь, что это очевидно. Даже продолжать не хочу, решил так решил. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2017, 11:05 |
|
Как лучше?
|
|||
---|---|---|---|
#18+
Есть ли более лучшее решение? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2017, 11:09 |
|
|
start [/forum/topic.php?all=1&fid=40&tid=1561493]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
146ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
85ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 294ms |
0 / 0 |