SQL! ну может с этим кто-что умное скажет...

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

SQL! ну может с этим кто-что умное скажет...

Сообщение Джентельмен » 05.09.2006 09:31:30

Вообщем вопрос по SQL запросам...
ну не хочу я ити на форум sql.ru... ну нравитса мне здесь... правда на мои вопросы не всегда отвечают, но то ниче...
а проблема такая...
есть sql запрос... типа:

select id, data, sclad_id from sclad_osn where data > '03.09.2006' and sclad_id = 'x' order by id

вот...
значение х может принимать 1,2,3,4... и т. д.
и соответсвенно из таблицы выбираютса все данные которым sclad_id равно x...

внимание вопрос!

какое значение нужно присвоить x что бы выбрались все записи?

p.s. sclad_id = 'x' - в запросе должно быть обезательно, можно менять только его значения.
Джентельмен
постоялец
 
Сообщения: 162
Зарегистрирован: 16.10.2005 10:47:26
Откуда: Украина Донбасс Краматорск

Сообщение DMA » 05.09.2006 09:42:50

Убрать из запроса [and sclad_id = 'x']. Или поменять условие на [and sclad_id > 0].
DMA
новенький
 
Сообщения: 10
Зарегистрирован: 24.05.2005 18:59:19

Сообщение Джентельмен » 05.09.2006 09:50:25

p.s. sclad_id = 'x' - в запросе должно быть обезательно, можно менять только его значения.

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

там что-то вроде х=* или х=all надо придумать... но х=* или х=all не работает...

еще варианты будут?
Джентельмен
постоялец
 
Сообщения: 162
Зарегистрирован: 16.10.2005 10:47:26
Откуда: Украина Донбасс Краматорск

Сообщение Сергей Смирнов » 05.09.2006 10:06:23

Известный трюк:

(sclad_id = ?x) OR (?x IS NULL)

Если параметр x установить равным NULL, то записи выберутся без учета реальных значений x. Если есть аллергия на NULL, то можно использовать какое либо нейтральное значение, но в данных при этом его быть не должно.
Аватара пользователя
Сергей Смирнов
энтузиаст
 
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва

Сообщение Джентельмен » 05.09.2006 10:17:34

интересно...
пишу...

sclad_osn.id_s='?1'

пишет...

conversion error from string '?1'

что не так???
Джентельмен
постоялец
 
Сообщения: 162
Зарегистрирован: 16.10.2005 10:47:26
Откуда: Украина Донбасс Краматорск

Сообщение Сергей Смирнов » 05.09.2006 10:42:59

Знаком "?" в SQL обозначают параметры - бегом читать книжки. Также не понял, зачем апострофы вокруг единицы. Это что, строка?
Аватара пользователя
Сергей Смирнов
энтузиаст
 
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва

Сообщение Джентельмен » 05.09.2006 13:59:43

да...
х: это строковая переменная...
стоп...
а если я там интейджер поставлю...
и без кавычек...
а все равно так не заработает...

работает...
но не так как надо...
чето он нето навыбирал...
я написал ?1 он выбрал одну запись 2 и одну запись 1, хотя должен был бы выбрать все записи...
не не нравитса такой вариант...

еще предложения!?
Джентельмен
постоялец
 
Сообщения: 162
Зарегистрирован: 16.10.2005 10:47:26
Откуда: Украина Донбасс Краматорск

Сообщение SergKam » 05.09.2006 21:35:56

вам ехать или шашечки?(читай подпись)

(sclad_id = '8' ) OR ('8' IS NULL)

где вместо 8 - ваше любое значение

так понятно?
или наподобии как ты в начале написал

(sclad_id = 'x') OR ('x' IS NULL)

учти интежер намного быстрее стринга.

а в сравнении не бывает всяких там звездочек или вопросиков, они бывают только в LIKE
но работает он ГОРАЗДО медленней
sclad_id LIKE x
где x может быть строкой или _(один любой символ) или %(что угодно)
SergKam
постоялец
 
Сообщения: 251
Зарегистрирован: 16.11.2005 21:31:11
Откуда: Украина,Харьков

Сообщение jwv » 08.09.2006 11:07:47

может быть так понятнее:

((sclad_id = :sclad_id ) or (:all_sclad_id = 1)) and ...

выбираем конкретный sclad_id:
ParamByName('sclad_id').AsInteger := 8;
ParamByName('all_sclad_id').AsInteger := 0;

выбираем все sclad_id:
//ParamByName('sclad_id').AsInteger := 8; // тут всё равно что присваивать
ParamByName('all_sclad_id').AsInteger := 1;
jwv
новенький
 
Сообщения: 21
Зарегистрирован: 10.05.2005 12:23:16

Сообщение AMD » 05.02.2008 12:58:58

Ну так чем закончилась история?
Получилось? или нет?
AMD
постоялец
 
Сообщения: 189
Зарегистрирован: 23.01.2008 22:25:25
Откуда: Кишинев

Сообщение Attid » 05.02.2008 15:43:52

AMD
ну а прочитать и попробывать? последнии два варианта работают полюбому.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2583
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

Рейтинг@Mail.ru