powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Выборка значений из большой таблицы
25 сообщений из 31, страница 1 из 2
Выборка значений из большой таблицы
    #38654929
Shaman2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет. Помогите решить задачку:

В запросе
products это продукты
product_w связка двух таблиц один ко многим
product_words перечень встречающихся слов. Те. продукт "масло сливочное" делает в этой таблице строки "масло" и "сливочное"

как в запросе вида

Код: sql
1.
2.
3.
4.
5.
6.
select * from products
right join
(select distinct id_product from product_w ps
join product_words pw on ps.id_product_word=pw.id_product_word
where (pw.name starting with 'масло') or (pw.name starting with 'сливочное')
) t on products.id_product=t.id_product



при указании в условии двух слов "масло сливочное" получить только "масло сливочное", а не вариации "масло первое", "сливочное второе" и т.п. ?

предвидя вопрос почему не like по products: я так понимаю из-за размера базы решили все предложения разбить на слова и засунуть их в индексируемое поле в product_words.
Ищет действительно очень быстро (тестовая база 200тыс продуктов, рабочая на порядок больше), но находит не всегда то.
...
Рейтинг: 0 / 0
Выборка значений из большой таблицы
    #38654931
Shaman2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант с

(pw.name starting with 'масло') AND (pw.name starting with 'сливочное')

не проходит, вообще ничего не находит
...
Рейтинг: 0 / 0
Выборка значений из большой таблицы
    #38654934
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
group by вместо distinct + having count(*) = 2
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выборка значений из большой таблицы
    #38654940
Shaman2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем понял что это даст? Можете пояснить?

Попробовал
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select * from products
right join
(select id_product from product_w ps
join product_words pw on ps.id_product_word=pw.id_product_word
where (pw.name starting with 'масло') or (pw.name starting with 'сливочное')
group by id_product
having count(*)=2
) t on products.id_product=t.id_product



получил кучу "сливочное" без масла например. В общем таже проблема, но порядок строк поменялся
...
Рейтинг: 0 / 0
Выборка значений из большой таблицы
    #38654954
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shaman2получил кучу "сливочное" без масла например.
Замени starting with на точное равенство.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выборка значений из большой таблицы
    #38654958
Shaman2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovShaman2получил кучу "сливочное" без масла например.
Замени starting with на точное равенство.


будут юзеры возмущатся. Так как окончание слова могут написать как угодно, часто набирают "масло сливо" и уже находят нужный результат в выдаче. Есть еще какие-то варианты?
...
Рейтинг: 0 / 0
Выборка значений из большой таблицы
    #38654968
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ты уверен, что в этой таблице слов не будет именно "масло" и "сливо"?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выборка значений из большой таблицы
    #38655077
Shaman2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovА ты уверен, что в этой таблице слов не будет именно "масло" и "сливо"?..


На данный момент нет :)
Если в выдачу попадут слова

"масло сливо"
"масло сливочное"
"сливочное масло"

то логика работы такова, что уже в выдаче стрелками вверх-вниз среди искомого выберут нужное.

Задача сейчас стоит набрав части слов или пару слов получить искомое, а не левое в поиске вроде "масло растительное" "масло детское", "мороженное сливочное" и т.п. И вот тут я как раз застрял и надолго, пришлось писать сюда.
...
Рейтинг: 0 / 0
Выборка значений из большой таблицы
    #38655087
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shaman2На данный момент нет :)
Так вот иди и пока не выяснишь как формируется таблица слов и связей и почему в выборку
попадает не то что нужно - не возвращайся. Потому что мой запрос - правильный и на
правильно сформированной таблице слов должен делать именно то что тебе надо.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выборка значений из большой таблицы
    #38655089
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shaman2,

вот это меня очень беспокоит

Код: sql
1.
2.
3.
from products
right join
(select distinct


в плане производительности. Думаю, будет весьма хреново. Как минимум, смысл right join от меня ускользает. Что, в products может не быть записей, которые справа, в этом select distinct?
...
Рейтинг: 0 / 0
Выборка значений из большой таблицы
    #38655091
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvвот это меня очень беспокоит в плане производительности.

Сдаётся мне, что именно для производительности это сделано: чтобы зафиксировать порядок
соединения и уменьшить ширину сортируемого НД.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выборка значений из большой таблицы
    #38655092
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shaman2И вот тут я как раз застрял и надолго, пришлось писать сюда.Да. Надо вас спасать. Хорошая задачка, мозг чуток размять пришлось... :-)
Пробуйте.
DDL + test data:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
-- clean:
create or alter procedure split_into_words as begin end;
create or alter procedure prod_by_patterns as begin end;
recreate table prod(id int);
recreate table prod_w(id int);
recreate table pwords(id int);
commit;

set term ^;
execute block as
begin
  begin execute statement 'drop sequence g'; when any do begin end  end
  begin execute statement 'drop domain dm_name_ci'; when any do begin end  end
  begin execute statement 'drop collation name_ci'; when any do begin end  end
end
^
set term ;^
commit;
--------------------------------------------------------------------------------
-- creating:
create sequence g;
create collation name_ci for utf8 from unicode case insensitive;
create domain dm_name_ci as varchar(80) character set utf8 collate name_ci;
commit;

recreate table prod(id int primary key, name dm_name_ci);
recreate table prod_w(prod_id int, word_id int, constraint prod_w_pk primary key (prod_id, word_id) );
recreate table pwords(id int primary key, name dm_name_ci unique);
commit;

--------------------------------------------------------------------------------
-- adding test data:
insert into prod values( gen_id(g,1), 'сливочное масло "Вологодское"' );
insert into prod values( gen_id(g,1), 'сливочное масло "Крестьянское"' );
insert into prod values( gen_id(g,1), 'масло сливочное "Президент"' );
insert into prod values( gen_id(g,1), 'масло сливочное "Парламент"');
insert into prod values( gen_id(g,1), 'заменитель сливочного масла "Европейский"');
insert into prod values( gen_id(g,1), 'сливочный масложир "Сибирский"');
insert into prod values( gen_id(g,1), 'сливово-масляное сливочное масло "СливоМасло"' );
insert into prod values( gen_id(g,1), 'маслянисто-сливочное масло "Сливовое"' );
insert into prod values( gen_id(g,1), 'сливово-масляное масло, с масляно-сливочной сливой' );
insert into prod values( gen_id(g,1), 'масляно-сливовая слива, со сливово-масляным маслом' );
insert into prod values( gen_id(g,1), 'масляно-сливовое масло, со сливово-масляным маслицем' );
insert into prod values( gen_id(g,1), 'масло растительное "Олейна"' );
insert into prod values( gen_id(g,1), 'сливки "Ополье"' );
insert into prod values( gen_id(g,1), 'масло масляное "Маслоцарство"');
insert into prod values( gen_id(g,1), 'сливки сливочные "Сливочное Королевство"');
insert into prod values( gen_id(g,1), 'масло шоколадное "Красный Октябрь"' );
insert into prod values( gen_id(g,1), 'сливки взбитые "Рот-Фронт"' );

insert into prod values( gen_id(g,1), '   МАСЛО    ' );
insert into prod values( gen_id(g,1), '   СЛИВКИ   ' );
commit;

set term ^;

--------------------------------------------------------------------------------
-- auxiliary proc for split strings into words and fill table pwords:
create or alter procedure split_into_words (
    a_text dm_name_ci,
    a_dels varchar(50) default ',.<>/?;:''"[]{}`~!@#$%^&*()-_=+\|/',
    a_special char(1) default ' ')
returns (
    word dm_name_ci,
    i int
)
AS
begin
for
    with recursive
    j as( -- loop #1: transform list of delimeters to rows
        select s, 1 i, substring(s from 1 for 1) del
        from(
          select replace(:a_dels,:a_special,'') s
          from rdb$database
        )
        
        UNION ALL
        
        select s, i+1, substring(s from i+1 for 1)
        from j
        where substring(s from i+1 for 1)<>''
    )

    ,d as(
        select :a_text s, :a_special sp from rdb$database
    )
    ,e as( -- loop #2: perform replacing each delimeter to `space`
        select d.s, replace(d.s, j.del, :a_special) s1, j.i, j.del
        from d join j on j.i=1

        UNION ALL

        select e.s, replace(e.s1, j.del, :a_special) s1, j.i, j.del
        from e
        join j on j.i = e.i + 1
    )
    ,f as(
        select s1 from e order by i desc rows 1
    )
    
    ,r as ( -- loop #3: perform split text into single words
        select iif(t.k>0, substring(t.s from t.k+1 ), t.s) s,
             iif(t.k>0,position( del, substring(t.s from t.k+1 )),-1) k,
             t.i,
             t.del,
             iif(t.k>0,left(t.s, t.k-1),t.s) word
        from(
          select f.s1 s, d.sp del, position(d.sp, s1) k, 0 i from f cross join d
        )t

        UNION ALL

        select iif(r.k>0, substring(r.s from r.k+1 ), r.s) s,
             iif(r.k>0,position(r.del, substring(r.s from r.k+1 )),-1) k,
             r.i+1,
             r.del,
             iif(r.k>0,left(r.s, r.k-1),r.s) word
        from r
        where r.k>=0
    )
    select word, i from r where word>''
    into
        word, i
do
    suspend;
end

^
--------------------------------------------------------------------------------
-- fill tables pwords and prod_w:
execute block as
    declare prod_id int;
    declare word dm_name_ci;
    declare word_id int = 0;
begin
     insert into pwords(id, name)
     select gen_id(g,1), word
     from (
        select distinct w.word
        from prod p
        left join split_into_words(p.name) w on 1=1
     );

    insert into prod_w(prod_id, word_id)
    select p.id, x.id
    from prod p
    left join split_into_words(p.name) w on 1=1
    left join pwords x on w.word = x.name
    group by 1,2;

end

^
--------------------------------------------------------------------------------
-- main SP:
create or alter procedure prod_by_patterns( a_pattern dm_name_ci )
returns( id int, name dm_name_ci )
as
begin
    for
        with
        inp_arg as(
          select p.word as pattern, p.i
          from split_into_words( :a_pattern ) p
          --from split_into_words('масл слив') p
          --from split_into_words('масл слив масл') p
          --from split_into_words('масл масл') p
          --from split_into_words('масл масл масл') p
          --from split_into_words('слив слив слив') p
          --from split_into_words('слив слив масл') p
          --from split_into_words('слив слив масл масл') p
        )
        ,inp_pat  as(
          select
            i.pattern, i.i
            ,(select count(*) from inp_arg) cnt_all
            ,(select count(distinct pattern) from inp_arg) cnt_unq
            ,(select count(*) from inp_arg x where x.pattern=i.pattern ) cnt_occ
          from inp_arg i
        )
        --select * from inp_pat i
        ,prod_pat as(
            select --pp.prod_id, i.pattern, i.i, i.cnt_all, i.cnt_occ, pw.id pw_id, pw.name pw_word, ps.name
            pp.prod_id
            ,i.pattern
            ,i.cnt_all --, pw.id
            ,count(distinct pw.id) pw_unq
            ,max(i.cnt_unq) cnt_unq
            ,max(i.cnt_occ) cnt_occ
            from inp_pat i
            left join pwords pw on pw.name starting with i.pattern
            left join prod_w pp on pw.id = pp.word_id
            group by pp.prod_id, i.pattern, i.cnt_all --, pw.id
            having count(distinct pw.id) >= max(i.cnt_occ)
        )
        --select * from  prod_pat
        ,prod_fin as (
            select pp.prod_id
            from prod_pat pp
            group by pp.prod_id
            having count(*) = max(cnt_unq)
        )
        select pf.prod_id, ps.name
        from prod_fin pf
        join prod ps on pf.prod_id = ps.id
        into id, name
    do
        suspend;
end

^
set term ;^
commit;
Test:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
SQL> set width name 70;
SQL> select * from prod_by_patterns('масл');

          ID NAME
============ ======================================================================
           1 сливочное масло "Вологодское"
           2 сливочное масло "Крестьянское"
           3 масло сливочное "Президент"
           4 масло сливочное "Парламент"
           5 заменитель сливочного масла "Европейс
           6 сливочный масложир "Сибирский"
           7 сливово-масляное сливочное масло "Сли▒
           8 маслянисто-сливочное масло "Сливовое"
           9 сливово-масляное масло, с масляно-слив
          10 масляно-сливовая слива, со сливово-мас
          11 масло растительное "Олейна"
          13 масло масляное "Маслоцарство"
          15 масло шоколадное "Красный Октябрь"
          17    МАСЛО

SQL> select * from prod_by_patterns('масл масл');

          ID NAME
============ ======================================================================
           7 сливово-масляное сливочное масло "Сли▒
           8 маслянисто-сливочное масло "Сливовое"
           9 сливово-масляное масло, с масляно-слив
          10 масляно-сливовая слива, со сливово-мас
          13 масло масляное "Маслоцарство"

SQL> select * from prod_by_patterns('масл слив слив');

          ID NAME
============ ======================================================================
           7 сливово-масляное сливочное масло "Сли▒
           8 маслянисто-сливочное масло "Сливовое"
           9 сливово-масляное масло, с масляно-слив
          10 масляно-сливовая слива, со сливово-мас

SQL> select * from prod_by_patterns('масл масл масл');

          ID NAME
============ ======================================================================
           9 сливово-масляное масло, с масляно-слив
          10 масляно-сливовая слива, со сливово-мас
          13 масло масляное "Маслоцарство"

SQL> select * from prod_by_patterns('слив слив слив');

          ID NAME
============ ======================================================================
           7 сливово-масляное сливочное масло "Сли▒
           9 сливово-масляное масло, с масляно-слив
          10 масляно-сливовая слива, со сливово-мас
          14 сливки сливочные "Сливочное Королевст

SQL>  select * from prod_by_patterns('слив слив масл масл');

          ID NAME
============ ======================================================================
           7 сливово-масляное сливочное масло "Сли▒
           8 маслянисто-сливочное масло "Сливовое"
           9 сливово-масляное масло, с масляно-слив
          10 масляно-сливовая слива, со сливово-мас

SQL> select * from prod_by_patterns('МАСЛ МАСЛ МАСЛ МАСЛ');

          ID NAME
============ ======================================================================
          11 масляно-сливовое масло, со сливово-мас
ЗЫ. Процедурка prod_by_patterns учитывает не только "все слова из шаблона", но и количество каждого из указанных в нём слов - см примеры под спойлером "Test".
ЗЗЫ. Знаки вопроса в выводимых данных - следствие хз чего при работе с UTF8 в isql при его запуске в консоли линуха. По идее, на нормальном клиенте всё должно быть Ок.
...
Рейтинг: 0 / 0
Выборка значений из большой таблицы
    #38655093
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

тебе пора деньги брать за решения sql :-)
...
Рейтинг: 0 / 0
Выборка значений из большой таблицы
    #38655095
Shaman2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovkdvвот это меня очень беспокоит в плане производительности.

Сдаётся мне, что именно для производительности это сделано: чтобы зафиксировать порядок
соединения и уменьшить ширину сортируемого НД.


Именно. Так как если я пользую right join то скорость выборки 312мс, а вот если просто join то тогда выборка идет более 3 секунд и использует почему-то план products natural
...
Рейтинг: 0 / 0
Выборка значений из большой таблицы
    #38655099
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvтебе пора деньги брать за решения sql :-)да это я так просто, sql-ex.ru вспомнил... чуть не всплакнул даже...
...
Рейтинг: 0 / 0
Выборка значений из большой таблицы
    #38655101
Shaman2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovShaman2На данный момент нет :)
Так вот иди и пока не выяснишь как формируется таблица слов и связей и почему в выборку
попадает не то что нужно - не возвращайся. Потому что мой запрос - правильный и на
правильно сформированной таблице слов должен делать именно то что тебе надо.


Там все хитро. Процедура заполнения слов работает так:

Вот есть код товара, есть наименование "масло сливочное"

Убираются все знаки препинания, точнее заменяются на пробел. Потом все приводится к английским буквам (как буд-то раскладку забыли переключить)
Теперь в таблицу слов вводятся полный код товара, далее вводится "масло сливочное" (приведеное к инглишу), потом вводится "масло", потом "сливочное"

И так каждый товар.

В итоге можно искать по коду, можно искать по первым буквам слова, при этом если не переключили раскладку и набрали английские буквы, всеравно найдет. Проблема вылезла при поиске двух или трех слов или частей слов если полностью фразу непомнят. Плюс тормоза. И вот тут уже обратились ко мне. Тормоза вылечил, а в поиске застрял, хоть и на первый взгляд задача была легкой.
...
Рейтинг: 0 / 0
Выборка значений из большой таблицы
    #38655110
Shaman2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид Процедурка prod_by_patterns учитывает не только "все слова из шаблона", но и количество каждого из указанных в нём слов - см примеры под спойлером "Test".
ЗЗЫ. Знаки вопроса в выводимых данных - следствие хз чего при работе с UTF8 в isql при его запуске в консоли линуха. По идее, на нормальном клиенте всё должно быть Ок.

Ого, если это все заработает на больших обьемах данных то Вам цены нету. Спасибо, будем пробовать.
...
Рейтинг: 0 / 0
Выборка значений из большой таблицы
    #38655112
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shaman2далее вводится "масло сливочное" (приведеное к инглишу), потом вводится
"масло", потом "сливочное"
Отсюда и проблема. "масло сливочное" в таблицу слов вводить нельзя. И нужно добавить
проверку на уникальность слов. Если, конечно, не требуется и в самом деле искать тавтологии.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выборка значений из большой таблицы
    #38655138
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shaman2,

оставаясь в "стиле" исходного запроса то как-то вот так
Код: sql
1.
2.
3.
4.
5.
6.
select * from products
right join
(select distinct id_product from product_w ps
  join product_words pw_1 on pw_1.id_product_word=ps.id_product_word and pw_1.name starting with 'масло'
  join product_words pw_2 on pw_2.id_product_word=ps.id_product_word and pw_2.name starting with 'сливочное'
) t on products.id_product=t.id_product
...
Рейтинг: 0 / 0
Выборка значений из большой таблицы
    #38655168
Shaman2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovShaman2далее вводится "масло сливочное" (приведеное к инглишу), потом вводится
"масло", потом "сливочное"
Отсюда и проблема. "масло сливочное" в таблицу слов вводить нельзя.


да, тут я ошибся. Целая фраза вводится только если это коды товара, наименование раскладывается по словам.

Dimitry Sibiryakov И нужно добавить
проверку на уникальность слов. Если, конечно, не требуется и в самом деле искать тавтологии.


так и есть, перед вставкой слов в таблицу идет проверка нет ли уже такого
...
Рейтинг: 0 / 0
Выборка значений из большой таблицы
    #38655170
Shaman2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m7mShaman2,

оставаясь в "стиле" исходного запроса то как-то вот так
Код: sql
1.
2.
3.
4.
5.
6.
select * from products
right join
(select distinct id_product from product_w ps
  join product_words pw_1 on pw_1.id_product_word=ps.id_product_word and pw_1.name starting with 'масло'
  join product_words pw_2 on pw_2.id_product_word=ps.id_product_word and pw_2.name starting with 'сливочное'
) t on products.id_product=t.id_product



неработает. вообще не находит
...
Рейтинг: 0 / 0
Выборка значений из большой таблицы
    #38655176
Shaman2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидЗЫ. Процедурка prod_by_patterns учитывает не только "все слова из шаблона", но и количество каждого из указанных в нём слов - см примеры под спойлером "Test".
ЗЗЫ. Знаки вопроса в выводимых данных - следствие хз чего при работе с UTF8 в isql при его запуске в консоли линуха. По идее, на нормальном клиенте всё должно быть Ок.

Две ошибки:

Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
E.S1.
At line 36, column 31.

эту я вроде подправил, но после нее лезет другая

Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
R.K.
At line 69, column 1.

тут застрял. На что оно ругается? По коду вроде все верно
...
Рейтинг: 0 / 0
Выборка значений из большой таблицы
    #38655188
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shaman2так и есть, перед вставкой слов в таблицу идет проверка нет ли уже такого
Тогда почему у тебя на одно "масло" вылезает две записи?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выборка значений из большой таблицы
    #38655194
Shaman2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovShaman2так и есть, перед вставкой слов в таблицу идет проверка нет ли уже такого
Тогда почему у тебя на одно "масло" вылезает две записи?


Хм... есть такое.
Слова разделяются по пробелу или по какому-то разделителю например. И оказываются в базе есть масло2648, масло1648, которые являются что-то вроде артикулов или окончание штрихкода наверное. И они же в таком виде записаны в базу слов. Вот и две-три записи.

Чтобы было понятнее, возьмем например другое направление: "audi80", "audi100", "audi". У одного клиента когда-то так писали, именно слитно. Но применительно к текущей задаче это было бы три разных слова.
...
Рейтинг: 0 / 0
Выборка значений из большой таблицы
    #38655231
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shaman2оказываются в базе есть масло2648, масло1648при вставке в словарь проверять не уникальность, а факт того, что вновь вставляемое слово является началом уже имеющегося и не вставлять. промахов станет немного меньше.
...
Рейтинг: 0 / 0
25 сообщений из 31, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Выборка значений из большой таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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