Конференция "Базы" » множество в условии [D7, FireBird 2.1]
 
  • belmol (17.07.09 09:14) [0]
    Доброго времени суток мастерам, вероятно тема поднималась но что то я не могу найти. Есть 2 таблицы мне ндо из одной выбрать строки в которых столбец содержит любое из значений столбца другой таблицы. в случае сравнения мне все понятно

    select * from main where stat1  in (select stat_ from stattable where id2=3)

    а если мне надо не "равенство", а "содержит" ?? не могу понять как сделать((
  • belmol (17.07.09 09:41) [1]
    неужели join-ом ?
  • Вариант (17.07.09 09:46) [2]

    > belmol   (17.07.09 09:14)  


    > belmol   (17.07.09 09:41) [1]

    Вопрос твой мне например не понятен. Можно и IN, можно и LIKE, можно и JOIN. Даже для одних условий задачи можно несколько вариантов. Условия твоей задачи не ясны.
  • belmol (17.07.09 09:52) [3]
    услолвие такое:
    таблица main
    ld (уникально)     |  name     | fam     |  stat1 (char 500)   |

    таблица stattable
    id       |     stat_ (char 10)    | id2 (int)    

    надо из таблицы main выбрать все строки stat1 которых содержит (select stat_ from stattable where id2=2) и желательно без join
  • belmol (17.07.09 09:54) [4]
    (select stat_ from stattable where id2=2) получается array of char
  • Вариант (17.07.09 10:21) [5]

    > belmol   (17.07.09 09:52) [3]


    > belmol   (17.07.09 09:54) [4]

    Полное соотвествие (main.stat1 =  stattable.stat_ + stattable.id2=2 )?

    Если так, то можно и без JOIN, что в общем все равно дает внутреннее объединение

    select main.* from main,stattable where stattable.id2=2 and main.stat1 =  stattable.stat_

    Если не так, тогда я все равно не понял вопрос или не учел специфику IB, давно уже с ним не работал. Тогда лучше набросал бы тройку записей одной таблицы, другой таблицы и показыл бы результат запроса в виде третье таблицы.
  • belmol (17.07.09 10:33) [6]
    таблица main
    ld (уникально)     |  name     | fam     |  stat1 (char 500)   |
    1                             вася     ...              105/2 111/2 228/2
    2                             петя     ...              112/2 163/1 158/3
    3                             кузя     ...              162/2 161/1
    4                             ваня     ...              159/4
    5                             ...         ...              ........

    таблица stattable
    id       |     stat_ (char 10)    | id2 (int)  
    1              132/2                    3
    2              105/2                    2
    3              159/4                    2
    4              163/2                    1

    при id2 = 2

    итог
    ld (уникально)     |  name     | fam     |  stat1 (char 500)   |
    1                             вася     ...              105/2 111/2 228/2
    4                             ваня     ...              159/4
  • Вариант (17.07.09 10:58) [7]

    > belmol   (17.07.09 10:33) [6]


    Понятно, найти подстроку в строке. Пощи про поиск подстрок в IB - функций IB  я не помню, слишком давно с ним работал
  • belmol (17.07.09 11:17) [8]
    так вот искал.. нету ничего подобного((  с 1 подсрокой да а с множеством.. нету ничего..
  • Вариант (17.07.09 12:00) [9]

    > belmol   (17.07.09 11:17) [8]


    Должно быть, даже если нет, то остается еще вариант с UDF
  • belmol (17.07.09 12:07) [10]
    народ, не уж то нет простого решения?
  • Вариант (17.07.09 12:13) [11]

    > http://www.ibase.ru/devinfo/charvar.htm

    Там пишут об операторах поиска по строкам. Кстати там же можешь и вопрос задать на www.ibase.ru и поскать
  • belmol (17.07.09 12:23) [12]
    >Вариант   (17.07.09 12:13) [11]
    спасибо, но вджруг еще кто то что то знает
  • Petr V. Abramov © (17.07.09 12:35) [13]

    > belmol   (17.07.09 09:41) [1]
    > неужели join-ом ?

    in (select stat_ from stattable where id2=3) преобразовывается в join, так что не бойся
  • Кщд (17.07.09 13:45) [14]

    > Вариант   (17.07.09 12:00) [9]
    > Должно быть, даже если нет, то остается еще вариант с UDF


    select m.*
    from main m
          join statable st
            on m.stat1 like '%' || st.stat_ || '%'
               and st.id2 = 2

  • belmol (17.07.09 14:59) [15]
    проблемма в том чт у меня запрос наборный..  и дофига переделывать если использовать  join, с join то я знаю как )) переписывать большой кусок.. т.к. таблица main имеет 50 столбцов и набор запроса происходит в зависимости от выбранных критериев..
  • Кщд (17.07.09 15:10) [16]
    >belmol   (17.07.09 14:59) [15]
    проблема в том, чтобы описать задачу полно, предоставить исходные данные в удобном виде и использовать теги при оформлении сообщения
  • Mike Kouzmine (20.07.09 23:06) [17]
    не равенство, содержит... Like?
  • Petr V. Abramov © (21.07.09 05:32) [18]

    > таблица main имеет 50 столбцов и набор запроса происходит
    > в зависимости от выбранных критериев..

    А если 51 столбец станет? не 50!, а 51! строк условий? :)
    может, переписать, пока не поздно? базе-то пофиг.
 
Конференция "Базы" » множество в условии [D7, FireBird 2.1]
Есть новые Нет новых   [134474   +34][b:0][p:0.001]