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

Вниз

Проблема с SELECT... Help!   Найти похожие ветки 

 
pathfinder   (2003-05-01 18:56) [0]

Подскажите плиз в чем тут дело...
Есть 2 таблицы sd и mp связь (один к одному) осущ. по полям sd_rdnum и mp_rdnum соответственно.
Необходимо выполнить поиск по 4 полям таблицы mp и получить данные из табл. sd.
если запрос выглядит так (поиск только по 2 полям):
select * from sd
where sd_rdnum in (select mp_rdnum from mp where mp_strana=:pS or mp_np=:pN)
то все номано...а если так:
select * from sd
where sd_rdnum in (select mp_rdnum from mp where mp_strana=:p0 or mp_subrf=:p1 or mp_raion=:p2 or mp_np=:p3)
то при вводе значения только одного поля выдаются все записи табл. sd :(


 
Zacho   (2003-05-01 19:54) [1]

Что значит "при вводе значения только одного поля " ? Т.е. в одном из параметров p0,p1,p2,p3 какое-либо значение, а в остальных - NULL ? Если так, то читай какой-нибудь учебник по SQL. Для сравнения с NULL используется не = , а IS NULL.


 
pathfinder   (2003-05-01 20:02) [2]

2 Zacho
а как быть в том случае, если нужно, чтобы поиск можно было вести как по всем так и по одному или двум или трем любым полям?


 
Zacho   (2003-05-01 20:21) [3]


> pathfinder © (01.05.03 20:02)

Например, можно формировать запрос динамически, и включать в него только нужные условия. И, вроде бы, FIBPlus может автоматом заменять = на IS NULL
P.S. Твой запрос весьма не оптимален, вместо IN (SELECT .. лучше используй JOIN


 
pathfinder   (2003-05-01 20:33) [4]


> Zacho ©

почему когда запрос выглядит так:
select * from sd
where sd_rdnum in (select mp_rdnum from mp where mp_strana=:pS or mp_np=:pN) все работает нормально несмотря на то, что я ввожу только одно значение (второе значение Null)?


 
Zacho   (2003-05-01 20:50) [5]


> pathfinder © (01.05.03 20:33)

А черт знает, но правильно все равно IS NULL


 
Zacho   (2003-05-01 21:04) [6]

Кстати, сейчас подумал, что в твоем случае IS NULL пожалуй ни причем, т.к. условие FIELD=NULL просто всегда будет false. Посмотри, что у тебя реально оказывается в параметрах при "пустом" значении, попробуй выполнить отдельно select mp_rdnum from mp where mp_strana=:p0 or mp_subrf=:p1 or mp_raion=:p2 or mp_np=:p3 посмотри, что он возвращает.
И переделай все-таки на JOIN.


 
pathfinder   (2003-05-01 21:47) [7]


> Zacho ©

при выполнении select mp_rdnum from mp where mp_strana=:p0 or mp_subrf=:p1 or mp_raion=:p2 or mp_np=:p3 получается тоже самое при вводе одного любого значения возвр. все записи таблицы.


 
Zacho   (2003-05-01 21:56) [8]


> pathfinder © (01.05.03 21:47)

Все-таки, что именно у тебя оказывается в параметрах "при вводе одного любого значения" ? Как именно ты присваиваешь значения параметрам ? И откуда их берешь ? В общем, посмотри, как выглядит твой запрос с конкретными значениями вместо параметров, и что он в таком случае возвращает.


 
pathfinder   (2003-05-01 22:15) [9]


> Zacho ©

Params[0].AsString:=edit1.Text;
Params[1].AsString:=edit2.Text;
Params[2].AsString:=edit3.Text;
Params[3].AsString:=edit4.Text;
кстати, если edit не содержит текста то его св-во text будет ""?
а с конкретными значениями все ок...


 
Zacho   (2003-05-01 22:36) [10]

Какого типа поля mp_strana, mp_subrf, mp_raion, mp_np ?
Какой компонент используешь для запроса ?
После присвоения значений параметрам посмотри с помощью Param[].IsNull действительно ли в них NULL, если нет то посмотри Param[].Value


 
Zacho   (2003-05-01 22:45) [11]

И еще попробуй просто сделать так:
if Trim(Edit1.Text)<>"" then Params[0].AsString:=edit1.Text else Params[0].Clear;
if Trim(Edit2.Text)<>"" then Params[1].AsString:=edit2.Text else Params[1].Clear;
if Trim(Edit3.Text)<>"" then Params[2].AsString:=edit3.Text else Params[2].Clear;
if Trim(Edit4.Text)<>"" then Params[3].AsString:=edit4.Text else Params[3].Clear;


 
pathfinder   (2003-05-01 23:16) [12]


> Zacho ©


Большое спасибо за помощь!!!







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

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

Наверх




Память: 0.47 MB
Время: 0.006 c
3-70156
Nikos
2003-05-02 11:10
2003.05.22
Как считать значение всех полей в БД по номеру строки?


6-70425
Vovaka
2003-03-25 09:39
2003.05.22
Как получить текущий DNS-сервер ?


14-70524
Дмитрий К.К.
2003-05-05 11:04
2003.05.22
Именинники 5 мая


1-70298
R
2003-05-13 03:13
2003.05.22
Быстрый перевод из String в Extended


1-70226
Top Gun
2003-05-11 16:14
2003.05.22
Определение номера контрола





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский