SQL + алиасы таблиц

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

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

SQL + алиасы таблиц

Сообщение Lisolog » 22.04.2008 21:02:30

Неясная, но решаемая проблемка:
Самый простой запрос (был конечно сложнее):
Код: Выделить всё
select G.name from goods G

..вываливается с ошибкой. Лечится прямым указыванием таблов:
Код: Выделить всё
select goods.name from goods

Кто знает почему так?

Laz0.9.24 win/lin mysql5
Lisolog
новенький
 
Сообщения: 39
Зарегистрирован: 13.12.2007 14:24:08
Откуда: Russia, SPb

Сообщение Attid » 22.04.2008 21:41:53

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

Сообщение Lisolog » 22.04.2008 21:53:15

Attid писал(а):а ошибку указать слабо ?
скорее всего проблема в парсере, попробуй отключите prepare
если так то ти пиши в трекер, ну или хотябы сюда если инглишь не любишь.


Егор знач такой, вполне обычный, говорящий мне что я SQL не знаю напроч :
Код: Выделить всё
"MySQL50Connection1 : Error executing query: You have an error in your SQL syntax, check the manual that corresponds to your MySQL server version for the right syntax to use near 'G' at line 1"

С английским принципиально плохо - по сему не решусь.
2All: попробуйте у кого мускл5?
Lisolog
новенький
 
Сообщения: 39
Зарегистрирован: 13.12.2007 14:24:08
Откуда: Russia, SPb

Сообщение Vadim » 23.04.2008 05:08:42

Lisolog
У меня Lazarus 0.9.25, FPC 2.2.0, MySQL 5.0.18.
Делаю:
Код: Выделить всё
SELECT G.name FROM otdels G

работает как часы, без малейшей ошибки.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение SHURA » 23.04.2008 14:06:31

На Lazarus 0.9.24 и MySQL 5.1.11 (Linux) работает.

Но недавно столкнулся с проблемой когда MySQL под линухом, что при запросе названия таблиц чувствительны к регистру, а названия столбцов нет. Под виндовым MySQL такого не было. Хотя чел, который занимается у нас Linux'ом сказал, что это в настройках самого Linux'а. Правда ли это?
Аватара пользователя
SHURA
незнакомец
 
Сообщения: 5
Зарегистрирован: 27.11.2007 18:32:26
Откуда: РФ, Киров

Сообщение shade » 24.04.2008 15:25:37

Правильный синтаксис:
SELECT G.name FROM otdels AS G
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение Lisolog » 25.04.2008 17:12:31

В общем разобрался что это не в том проблема.
Рассматриваю логи мускла.
Лог Запроса 1:
Код: Выделить всё
23 Query       SELECT S.chk_id, S.prim, S.price_rozn, G.name FROM chk_slave AS S INNER JOIN goods AS G ON S.good_id=G.good_id
23 Query       show index from chk_slave AS S INNER JOIN goods AS G ON S.good_id=G.good_id

..не работает и вываливает ошибку:
Код: Выделить всё
Project raised exception class "EDatabaseError with message
mysq: Error executing query: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS S INNER JOIN goods AS S ON S.go###(gdb unparsed remainder...)###
[OK]


А вот Лог Запроса 2:
Код: Выделить всё
12 Query       SELECT G.name, (R.count-IF(EE.spis>0,EE.spis,0)) as itog, G.izm, W.bar FROM storage R
LEFT JOIN ( SELECT S.good_id, M.bar_id, (SUM(S.amount*S.counts)) as spis FROM chk_slave S
INNER JOIN chk_master M ON M.chk_id=S.chk_id
WHERE M.status=1 and M.dateon between 20080415070000 and 20080416203058 and M.bar_id=0
group by M.bar_id,S.good_id ) EE ON EE.bar_id=R.bar_id and EE.good_id=R.good_id
INNER JOIN goods G on G.good_id=R.good_id
INNER JOIN warez W on W.id=R.bar_id
where( G.group_id not in (14,15) and G.amount=1 and R.bar_id=0
)order by G.name

... который работает
Сижу, пытаюсь думать...
Что означает в первом запросе "23 Query show index..." ?
Почему я не вижу этого во втором?
Lisolog
новенький
 
Сообщения: 39
Зарегистрирован: 13.12.2007 14:24:08
Откуда: Russia, SPb

Re: SQL + алиасы таблиц

Сообщение Lisolog » 28.04.2008 19:04:00

Докопал:

судя по всему криво работает TSQLQuery.ParseSQL (пытается построить нереальный индекс), выключил - всё норм.

Тема закрыта - всем спаибо +)
Lisolog
новенький
 
Сообщения: 39
Зарегистрирован: 13.12.2007 14:24:08
Откуда: Russia, SPb

Re: SQL + алиасы таблиц

Сообщение Attid » 29.04.2008 11:03:04

Lisolog писал(а):Тема закрыта - всем спаибо +)

стоять ! как закрыта ? а кто будет баг в трекер писать ? описание что не так и меленький воспроизводимый пример или в трекер или сюда давай.
если с патчем то будет еще круче =)

Добавлено спустя 1 минуту 25 секунд:
Lisolog писал(а):Докопал:
выключил - всё норм.

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

Re: SQL + алиасы таблиц

Сообщение Lisolog » 29.04.2008 15:01:12

Ну извини, не предал сразу значения, думал, что уже если парсер не должен глючить.(в следующий раз буду внимательнее)
На самом деле не мастер я в трекер писать, но исходные данные дам.
По поводу примера на несколько постов раньше лежит очевидный, хотя люди говорят, что у них работает и это меня сдерживает.
Патчами нет смысла естественно тоже кидаться.
Предположение:
парсер пытается использовать старые синтаксисы работы с мусклом, но могу ошибаться.
Lisolog
новенький
 
Сообщения: 39
Зарегистрирован: 13.12.2007 14:24:08
Откуда: Russia, SPb

Re: SQL + алиасы таблиц

Сообщение Attid » 29.04.2008 17:41:04

Lisolog писал(а):Ну извини, не предал сразу значения

да я не ругаюсь, я констатирую факт =)

Lisolog писал(а):По поводу примера на несколько постов раньше лежит очевидный, хотя люди говорят, что у них работает и это меня сдерживает.

если работает не у всех то это не пример, в прошлом сообщении ты там что-то про индекс говорил, хотя сам парсер индекс не строит, но может после како-то друго-го запроса проявляется.
ты пробывал на базе где только одна таблица к примеру ? в трекер после примера я отпишу. только по хорошему чтобы ты потом не пропал когда там вопросы задавать будут =)
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: SQL + алиасы таблиц

Сообщение Lisolog » 29.04.2008 20:49:50

Ну в общем когда запрос к одной таблице - то проблем нет.
Типа
Код: Выделить всё
select pole1,pole2 from table

Ну если приколоться, и обращаться к полям сей таблицы (одной) по алиасу, то срабатывает вид:
Код: Выделить всё
select table.pole1, table.pole2 from table

или
Код: Выделить всё
select T.pole1, T.pole2 from table as T

, но неработает (хотя новые версии как MS так и MySQL-ов ховают) следующее:
Код: Выделить всё
select T.pole1, T.pole2 from table T

А вот с обращениями в кучу таблом начинаются приколы.
От 25.04.2008 16:12:31 я описал какие. До обоих запросов выполнется
Код: Выделить всё
SET character_set_client="utf8", character_set_connection="cp1251",character_set_results="utf8";

и один маленький селект на одну таблицу.
Эффект в дезайнтайме - тот же.. Правда работающий в дезайнтайме не пробовал - попробую.
На самом деле тут очень много точнкостей, начиная от версии мускла и заканчивая какие поля индексные, какие нет.
Могу сказать что
Код: Выделить всё
23 Query       show index from chk_slave AS S INNER JOIN goods AS G ON S.good_id=G.good_id

- ерунда полная, ну не индекс это

По поводу моей пропажи - она исключена, ибо проект слишком резиновый и растянутый надолго во времени, да и линь бесплатный - спрос есть, поэтому у меня всегда есть вопросы, а куда мне их задавать кроме чем сюда, правда можно в полумёртвую ru.delphi (fido). Ну а на мыло об ответах реагирую своевременно.
Lisolog
новенький
 
Сообщения: 39
Зарегистрирован: 13.12.2007 14:24:08
Откуда: Russia, SPb


Вернуться в Lazarus

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

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 8

Рейтинг@Mail.ru