Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2010.11.21;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.003 c
15-1281190075
Кэти
2010-08-07 18:07
2010.11.21
Как отключить редирект


3-1248096780
well
2009-07-20 17:33
2010.11.21
Обработка исключений Oracle


2-1282634473
mefodiy
2010-08-24 11:21
2010.11.21
Просмотр результата SELECT по строкам в функции MySQL


2-1282898767
sergey
2010-08-27 12:46
2010.11.21
Событие TField.OnSetText


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский