Текущий архив: 2008.07.06;
Скачать: CL | DM;
Вниз
Проблема с LIKE Найти похожие ветки
← →
Германн © (2008-01-25 17:50) [0]Запрос SELECT CARDIDX.ID_CARD, PEOPLE.SURNAME, PEOPLE.Name, PEOPLE.Patronymic,
ORGANIZATION.Name from CARDIDX, CARD, PEOPLE, ORGANIZATION
where (CARDIDX.ID_Card = CARD.ID_Card) and (CARD.ID_Pep = PEOPLE.ID_Pep)
and (PEOPLE.ID_Org = ORGANIZATION.ID_Org) and (CARDIDX.Id_Dev = 2)
and (CARDIDX.Load_Result like "ERR%") в редакторе SQL IBExpert"а работает нормально. Отбирает нужные записи. Тот же запрос в программе не находит ни одной записи like "ERR%". Ошибок никаких не выдается. Возможно это связано с тем, что в программе TADODataset подключен к базе через ODBC драйвер? Как быть?
← →
Palladin © (2008-01-25 18:04) [1]попробуй не % использовать а *
← →
Германн © (2008-01-25 18:15) [2]
> Palladin © (25.01.08 18:04) [1]
>
> попробуй не % использовать а *
>
Пробовал. Получил:
2.5 Type : EOleException
2.6 Message : [Gemini InterBase ODBC Driver][INTERBASE]Dynamic SQL Error. SQL error code = -104. Token unknown - line 1, char 306. ).
← →
Германн © (2008-01-25 18:21) [3]
> Германн © (25.01.08 18:15) [2]
Не вру. Token unknown - это от другого ошибка. Но с * результат абсолютно такой же как и с %. Возвращает пустой набор.
← →
ПостОвый терминатор © (2008-01-25 18:36) [4]Похоже, что здесь необходимо пошаманить с кавычками
>(CARDIDX.Load_Result like "ERR%")
что-то типа
>(CARDIDX.Load_Result like ""ERR%"")
Попробуй, у меня, правда, не IB и не ODBC
← →
ПостОвый терминатор © (2008-01-25 18:38) [5]Получилось не очень наглядно. Смысл: поставить пару кавычек слева и пару справа (не двойные кавычки, а именно пару одинарных)
← →
Германн © (2008-01-25 18:47) [6]
> Смысл: поставить пару кавычек слева и пару справа (не двойные
> кавычки, а именно пару одинарных)
Там так и есть. В смысле в CommandText.
← →
Германн © (2008-01-25 19:03) [7]А ларчик просто открывался. В IBExpert"е была открыта база с другого компьютера, в которой строчки like "ERR% были. А в моей базе их таки и не было.
:-)
← →
turbouser © (2008-01-25 19:06) [8]
> Германн © (25.01.08 19:03) [7]
Запрос все-таки неплохо бы переделать. С алиасами и явными join-ами.
Например так:SELECT
CX.ID_CARD,
P.SURNAME,
P.Name,
P.Patronymic,
O.Name
from CARD C
join CARDIDX CX on CX.ID_Card = C.ID_Card
join PEOPLE P on P.ID_Pep=C.ID_Pep
join ORGANIZATION O on O.ID_Org=P.ID_Org
where
CX.Id_Dev = 2 and
CX.Load_Result like "ERR%"
← →
Johnmen © (2008-01-25 19:12) [9]...причем сначала должны соединяться таблицы, в которых меньшее число записей.
← →
Германн © (2008-01-25 19:15) [10]
> turbouser © (25.01.08 19:06) [8]
>
>
> > Германн © (25.01.08 19:03) [7]
>
> Запрос все-таки неплохо бы переделать. С алиасами и явными
> join-ами.
>
Ну join для меня почти высший класс. Про них мне еще читать и читать. Но попробую. А вот в чем преимущество алиасов?
← →
Германн © (2008-01-25 19:22) [11]
> Johnmen © (25.01.08 19:12) [9]
>
> ...причем сначала должны соединяться таблицы, в которых
> меньшее число записей.
>
Учту.
← →
turbouser © (2008-01-25 19:23) [12]
> Германн © (25.01.08 19:15) [10]
http://www.ibase.ru/devinfo/joins.htm
Процитирую :алиасы таблиц. Без использования алиасов таблиц все версии InterBase (кроме Firebird начиная с 1.0) могут выдать непредсказуемый результат, то есть, перепутать местами столбцы NAME из таблицы товаров и таблицы клиентов. Алиасы позволяют не только избежать этого, но и повышают "переносимость" запроса, а также облегчают понимание, из какой таблицы выбирается какой столбец (даже если в выборке нет одинаковых имен столбцов). В Firebird 2.0 не допускается смешивание алиасов и имен таблиц, не рекомендуется это делать и для других версий InterBase и Firebird.
← →
Petr V. Abramov © (2008-01-25 19:38) [13]
> Запрос все-таки неплохо бы переделать. С алиасами и явными
> join-ами.
нафига? читать не проще, писать не быстрее, результат тот же.
← →
Petr V. Abramov © (2008-01-25 19:39) [14][13] - это про явные джойны, алиасы, ессно, вещь хорошая.
← →
Anatoly Podgoretsky © (2008-01-25 20:55) [15]
> Ну join для меня почти высший класс. Про них мне еще читать
> и читать. Но попробую. А вот в чем преимущество алиасов?
Ничего сложного, как раз все просто, да ты и так используешь неявный INNER JOIN
А алиасы дают два преимущества
1. однозначность
2. компактность
← →
Германн © (2008-01-25 21:51) [16]
> Ничего сложного, как раз все просто, да ты и так используешь
> неявный INNER JOIN
>
Сложного конечно ничего, только надо знать что и как работает. Потому что вот такой запрос три года назад я получил методом ненаучного тыка:select Rooms.ID_Group, Rooms.NameRoom, Rooms.ID_Rooms,
Groups.GName, ConfRR.Addr, ConfRR.Reader
from (Rooms left join ConfRR
on (Rooms.ID_Rooms = ConfRR.ID_Rooms))
left join Groups
on (Rooms.ID_Group = Groups.ID_Group)
Group by Rooms.ID_Group, Groups.GName, Rooms.ID_Rooms,
Rooms.NameRoom, ConfRR.Addr, ConfRR.Reader
Перепробовал при этом всякие сочетания неизвестных мне по сути терминов join, left, outer и т.п. Спроси меня что означает left join и почему именно это сочетание дало нужный мне результат и я отвечу Х.З.
← →
turbouser © (2008-01-25 22:01) [17]
> Германн © (25.01.08 21:51) [16]
>
>
> > Ничего сложного, как раз все просто, да ты и так используешь
> > неявный INNER JOIN
> >
>
> Сложного конечно ничего, только надо знать что и как работает.
>
См. ссылку в [12] - там как раз про джойны. Явные и неявные.
← →
Германн © (2008-01-25 23:58) [18]
> turbouser © (25.01.08 22:01) [17]
>
>
Спасибо за ссылку. Сохранил статью на будущее. Прочитав понял
> почему именно это сочетание дало нужный мне результат
Век живи, век учись. :)
Страницы: 1 вся ветка
Текущий архив: 2008.07.06;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.033 c