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

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

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

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

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

Сообщение Джентельмен »

Вообщем вопрос по 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' - в запросе должно быть обезательно, можно менять только его значения.
DMA
новенький
Сообщения: 10
Зарегистрирован: 24.05.2005 18:59:19

Сообщение DMA »

Убрать из запроса [and sclad_id = 'x']. Или поменять условие на [and sclad_id > 0].
Джентельмен
постоялец
Сообщения: 162
Зарегистрирован: 16.10.2005 10:47:26
Откуда: Украина Донбасс Краматорск
Контактная информация:

Сообщение Джентельмен »

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

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

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

еще варианты будут?
Аватара пользователя
Сергей Смирнов
энтузиаст
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва
Контактная информация:

Сообщение Сергей Смирнов »

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

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

Если параметр x установить равным NULL, то записи выберутся без учета реальных значений x. Если есть аллергия на NULL, то можно использовать какое либо нейтральное значение, но в данных при этом его быть не должно.
Джентельмен
постоялец
Сообщения: 162
Зарегистрирован: 16.10.2005 10:47:26
Откуда: Украина Донбасс Краматорск
Контактная информация:

Сообщение Джентельмен »

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

sclad_osn.id_s='?1'

пишет...

conversion error from string '?1'

что не так???
Аватара пользователя
Сергей Смирнов
энтузиаст
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва
Контактная информация:

Сообщение Сергей Смирнов »

Знаком "?" в SQL обозначают параметры - бегом читать книжки. Также не понял, зачем апострофы вокруг единицы. Это что, строка?
Джентельмен
постоялец
Сообщения: 162
Зарегистрирован: 16.10.2005 10:47:26
Откуда: Украина Донбасс Краматорск
Контактная информация:

Сообщение Джентельмен »

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

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

еще предложения!?
SergKam
постоялец
Сообщения: 251
Зарегистрирован: 16.11.2005 20:31:11
Откуда: Украина,Харьков

Сообщение SergKam »

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

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

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

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

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

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

а в сравнении не бывает всяких там звездочек или вопросиков, они бывают только в LIKE
но работает он ГОРАЗДО медленней
sclad_id LIKE x
где x может быть строкой или _(один любой символ) или %(что угодно)
jwv
новенький
Сообщения: 21
Зарегистрирован: 10.05.2005 12:23:16

Сообщение jwv »

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

((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;
AMD
постоялец
Сообщения: 189
Зарегистрирован: 23.01.2008 21:25:25
Откуда: Кишинев

Сообщение AMD »

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

Сообщение Attid »

AMD
ну а прочитать и попробывать? последнии два варианта работают полюбому.
Ответить