Связь ==. Перемена мест полей.

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

Связь ==. Перемена мест полей.

Сообщение RAJAH »

Доборого времени суток!
Есть 2 запроса.
1-й:

Код: Выделить всё

select spmoveos.newstoim, moveos.datob, spmoveos.ckatos, katos.nameos
from moveos, spmoveos, katos
where
((
moveos.nrec /== spmoveos.cmoveos and
begper      <<= moveos.datob and
endper      >>= moveos.datob and
4            == moveos.sysoper and
15           == moveos.tipdoc and
katos.nrec   == spmoveos.ckatos and
3            == spmoveos.cnastros
));
2-й:

Код: Выделить всё

select spmoveos.newstoim, moveos.datob, spmoveos.ckatos, katos.nameos
from moveos, spmoveos, katos
where
((
moveos.nrec    /== spmoveos.cmoveos and
begper         <<= moveos.datob and
endper         >>= moveos.datob and
4               == moveos.sysoper and
15              == moveos.tipdoc and
spmoveos.ckatos == katos.nrec and
3               == spmoveos.cnastros
));
Как видно, они различаются только предпоследней связью: поля переставлены. Однако 2-й запрос выдаёт данные, а 1-й - пустой. Неужели такое поведение системы нормально? И вопрос для знатоков: что вызывает такие результаты? Я догадываюсь, что дело в каких-то индексах...
Спасибо за внимание!
n0where
Местный житель
Сообщения: 499
Зарегистрирован: 30 дек 2010, 08:16

Re: Связь ==. Перемена мест полей.

Сообщение n0where »

Конечно вернёт пусто.

В хелпе же написано. Слева от == нужно указывать с чем будет сравниваться права часть.

Код: Выделить всё

moveos.nrec /== spmoveos.cmoveos and
katos.nrec   == spmoveos.ckatos and
т.о. Вы должны определить moveos.nrec и katos.nrec и на основании их сделать выборку spmoveos.

Код: Выделить всё

moveos.nrec    /== spmoveos.cmoveos and
spmoveos.ckatos == katos.nrec and
т.е. вы на основании moveos ищите spmoveos, на основании spmoveos ищите katos, что верно.
хороший программист — это человек, который переходя улицу с односторонним движением смотрит в обе стороны
Semi-bit
Постоянный обитатель
Сообщения: 123
Зарегистрирован: 01 фев 2007, 12:45
Откуда: Магнитогорск
Контактная информация:

Re: Связь ==. Перемена мест полей.

Сообщение Semi-bit »

n0where писал(а):т.е. вы на основании moveos ищите spmoveos, на основании spmoveos ищите katos, что верно.
Иными словами, слева указывается ключ, справа - множество значений, в которых его следует искать.

Собственно, с понимания этого факта и началось моё знакомство с Випом :)
Испытываю траблы с даблами
ВИП — Велосипедо-Изобретательская Парадигма
САППОРТ — Сборище Абсолютно Пустых Посредственно Образованных Ржущих Троллей
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Связь ==. Перемена мест полей.

Сообщение zna »

Шарюсь в темах по проблеме с выборками, вот, наткнулся:
Semi-bit писал(а):
n0where писал(а):т.е. вы на основании moveos ищите spmoveos, на основании spmoveos ищите katos, что верно.
Иными словами, слева указывается ключ, справа - множество значений, в которых его следует искать.

Собственно, с понимания этого факта и началось моё знакомство с Випом :)
Хм, может быть наоборот: справа указывается первичный ключ таблицы (.nrec), а слева - множество значений (вторичный ключ) в подцепленной таблице, в котором его следует искать??
Darikon
Постоянный обитатель
Сообщения: 188
Зарегистрирован: 17 июн 2008, 17:07
Откуда: Москва
Контактная информация:

Re: Связь ==. Перемена мест полей.

Сообщение Darikon »

zna писал(а):Шарюсь в темах по проблеме с выборками, вот, наткнулся:
Semi-bit писал(а):
n0where писал(а):т.е. вы на основании moveos ищите spmoveos, на основании spmoveos ищите katos, что верно.
Иными словами, слева указывается ключ, справа - множество значений, в которых его следует искать.

Собственно, с понимания этого факта и началось моё знакомство с Випом :)
Хм, может быть наоборот: справа указывается первичный ключ таблицы (.nrec), а слева - множество значений (вторичный ключ) в подцепленной таблице, в котором его следует искать??
в связке "((ыва== фыва))" - значение слева - ключ.
просто фильтр "and rtr = key" - справа (но здесь фактически сложившаяся практика, т.к. можно менять местами )
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Связь ==. Перемена мест полей.

Сообщение zna »

Тогда моё предположение ошибочно и Semi-bit написал верно. :eek:
Ответить