Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2008.07.06;
Скачать: [xml.tar.bz2];

Вниз

Проблема с 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.04 c
2-1212741153
VovKul
2008-06-06 12:32
2008.07.06
Разкладка клавиатуры


2-1212654838
redlord
2008-06-05 12:33
2008.07.06
эмуляция нажатия enter


15-1211721164
Vipr
2008-05-25 17:12
2008.07.06
Где взять справочник населенных пунктов СНГ (можно и платно)


2-1212649048
Андрей Пл
2008-06-05 10:57
2008.07.06
где хранить настройки


2-1213006225
ciborg
2008-06-09 14:10
2008.07.06
Файл занят другим приложением





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