Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.11.21;
Скачать: CL | DM;

Вниз

множество в условии   Найти похожие ветки 

 
belmol   (2009-07-17 09:14) [0]

Доброго времени суток мастерам, вероятно тема поднималась но что то я не могу найти. Есть 2 таблицы мне ндо из одной выбрать строки в которых столбец содержит любое из значений столбца другой таблицы. в случае сравнения мне все понятно

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

а если мне надо не "равенство", а "содержит" ?? не могу понять как сделать((


 
belmol   (2009-07-17 09:41) [1]

неужели join-ом ?


 
Вариант   (2009-07-17 09:46) [2]


> belmol   (17.07.09 09:14)  


> belmol   (17.07.09 09:41) [1]

Вопрос твой мне например не понятен. Можно и IN, можно и LIKE, можно и JOIN. Даже для одних условий задачи можно несколько вариантов. Условия твоей задачи не ясны.


 
belmol   (2009-07-17 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   (2009-07-17 09:54) [4]

(select stat_ from stattable where id2=2) получается array of char


 
Вариант   (2009-07-17 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   (2009-07-17 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


 
Вариант   (2009-07-17 10:58) [7]


> belmol   (17.07.09 10:33) [6]


Понятно, найти подстроку в строке. Пощи про поиск подстрок в IB - функций IB  я не помню, слишком давно с ним работал


 
belmol   (2009-07-17 11:17) [8]

так вот искал.. нету ничего подобного((  с 1 подсрокой да а с множеством.. нету ничего..


 
Вариант   (2009-07-17 12:00) [9]


> belmol   (17.07.09 11:17) [8]


Должно быть, даже если нет, то остается еще вариант с UDF


 
belmol   (2009-07-17 12:07) [10]

народ, не уж то нет простого решения?


 
Вариант   (2009-07-17 12:13) [11]


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

Там пишут об операторах поиска по строкам. Кстати там же можешь и вопрос задать на www.ibase.ru и поскать


 
belmol   (2009-07-17 12:23) [12]

>Вариант   (17.07.09 12:13) [11]
спасибо, но вджруг еще кто то что то знает


 
Petr V. Abramov ©   (2009-07-17 12:35) [13]


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

in (select stat_ from stattable where id2=3) преобразовывается в join, так что не бойся


 
Кщд   (2009-07-17 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   (2009-07-17 14:59) [15]

проблемма в том чт у меня запрос наборный..  и дофига переделывать если использовать  join, с join то я знаю как )) переписывать большой кусок.. т.к. таблица main имеет 50 столбцов и набор запроса происходит в зависимости от выбранных критериев..


 
Кщд   (2009-07-17 15:10) [16]

>belmol   (17.07.09 14:59) [15]
проблема в том, чтобы описать задачу полно, предоставить исходные данные в удобном виде и использовать теги при оформлении сообщения


 
Mike Kouzmine   (2009-07-20 23:06) [17]

не равенство, содержит... Like?


 
Petr V. Abramov ©   (2009-07-21 05:32) [18]


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

А если 51 столбец станет? не 50!, а 51! строк условий? :)
может, переписать, пока не поздно? базе-то пофиг.



Страницы: 1 вся ветка

Текущий архив: 2010.11.21;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.01 c
15-1281412831
ixen
2010-08-10 08:00
2010.11.21
DMClient не хочет работать


15-1281378423
crab
2010-08-09 22:27
2010.11.21
Требуется c++ -> delphi конвертор


15-1281731393
Юрий
2010-08-14 00:29
2010.11.21
С днем рождения ! 14 августа 2010 суббота


2-1283276087
barsik
2010-08-31 21:34
2010.11.21
Как сделать загрузку формы динамично


3-1247743513
Tonich
2009-07-16 15:25
2010.11.21
SQL запрос