SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 04.06.2008 14:09:23

Igor Panshin
Завсегдатай
Зарегистрирован: 04.06.2008
Сообщений: 62

Проблема предложения DELETE with ALIAS

Прошу помочь так как считаю, что все пишу корректно.
Проблемное предложение

DELETE tRet FROM `StopGap`.`dvfn_link_get` tRet
JOIN `test`.`dvview_instances` tInst ON tRet.`InstanceID` = tInst.`InstanceID` WHERE tInst.`Deleted` = 1;


Также проверял клаусу  `StopGap`.`dvfn_link_get` AS tRet. Она тоже дает ошибку.

Выражение, которое выполняется корректно

  DELETE `StopGap`.`dvfn_link_get` FROM `StopGap`.`dvfn_link_get`
JOIN `test`.`dvview_instances` tInst ON `StopGap`.`dvfn_link_get`.`InstanceID` = tInst.`InstanceID`
WHERE tInst.`Deleted` = 1;

Также корректно выполняется

INSERT `StopGap`.`dvfn_link_get` ( `InstanceID` , `Distance` )
SELECT DISTINCT tLinks.`DestinationCardID` , Step FROM `StopGap`.`dvfn_link_get` tCards
JOIN `test`.`dvsys_links` tLinks ON tLinks.`SourceCardID` = tCards.`InstanceID` WHERE tCards.`Distance` = ( Step - 1 ) AND tLinks.`Type` IN ( SELECT `Type` FROM `test`.`Types` ) AND NOT EXISTS ( SELECT `InstanceID` FROM `StopGap`.`dvfn_link_get` WHERE `InstanceID` = tLinks.`DestinationCardID` );


Создание таблицы

DROP TABLE IF EXISTS `StopGap`.`dvfn_link_get`;
CREATE TABLE IF NOT EXISTS `StopGap`.`dvfn_link_get` ( InstanceID CHAR(36) PRIMARY KEY , Distance int );

Неактивен

 

#2 04.06.2008 15:25:20

EugeneTM
Гуру
Зарегистрирован: 11.04.2008
Сообщений: 89

Re: Проблема предложения DELETE with ALIAS

Note
If you provide an alias for a table, you must use the alias when referring to the table:

Неактивен

 

#3 04.06.2008 19:22:03

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Проблема предложения DELETE with ALIAS

Какая именно ошибка возникает? У меня отрабатывает без ошибки, mysql-5.0.22

Неактивен

 

#4 05.06.2008 09:46:29

Igor Panshin
Завсегдатай
Зарегистрирован: 04.06.2008
Сообщений: 62

Re: Проблема предложения DELETE with ALIAS

Ошибка

Unknown table 'tret' in MULTIDELETE

As You see i 'm using an alias

DELETE tRet FROM `StopGap`.`dvfn_link_get` tRet
JOIN `test`.`dvview_instances` tInst ON tRet.`InstanceID` = tInst.`InstanceID`
WHERE tInst.`Deleted` = 1;

Mysql version is

mysql> select version();
+-----------------------+
| version()             |
+-----------------------+
| 6.0.4-alpha-community |
+-----------------------+
1 row in set (0.00 sec)

Неактивен

 

#5 05.06.2008 09:51:27

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 845

Re: Проблема предложения DELETE with ALIAS

Когда версия нестабильная, можно всего ожидать, тем более если это альфа.
Скорее всего, это бага данной версии.
Попробуйте обновить.
Если не поможет - пишите на bugs.mysql.com.

Кстати. А зачем Вам 6-я? Она стабильная выйдет еще совсем не скоро...

Неактивен

 

#6 05.06.2008 10:05:35

Igor Panshin
Завсегдатай
Зарегистрирован: 04.06.2008
Сообщений: 62

Re: Проблема предложения DELETE with ALIAS

Версию я взял последнюю. А что значит не скоро?

Неактивен

 

#7 05.06.2008 10:10:02

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 845

Re: Проблема предложения DELETE with ALIAS

А что значит не скоро?

Порядка года через два, где-то.

Возьмите лучше 5.1 - эта вот-вот официальная стабильная выйдет.
И работает щас уже хорошо, без багов почти.

Неактивен

 

#8 05.06.2008 10:48:14

Igor Panshin
Завсегдатай
Зарегистрирован: 04.06.2008
Сообщений: 62

Re: Проблема предложения DELETE with ALIAS

Через 2 года - это многовато. Спасибо попробую взять 5.1.

Неактивен

 

#9 05.06.2008 14:18:42

Igor Panshin
Завсегдатай
Зарегистрирован: 04.06.2008
Сообщений: 62

Re: Проблема предложения DELETE with ALIAS

Уточняю состояние в котором происходит ошибка и не только в 6.0, но и в 5.1

Если ты работаешь в текущей БД, определенной connect stopgap, то все корректно

DELETE t1 FROM `stopgap`.`dvfn_link_get` t1; -- ok

Если же текущая отличается от указанной в предложении DELETE,  скажем test, то ппредложение
DELETE t1 FROM `stopgap`.`dvfn_link_get` t1; -- not ok
выдает ошибку

Это было бы можно понять скажем ограничением доступа к другой схеме, но я работаю под root и предложение
DELETE `stopgap`.`dvfn_link_get` FROM `stopgap`.`dvfn_link_get`; -- ok
опять же проходит.

Похоже, что все-таки бага.

Неактивен

 

#10 05.06.2008 14:25:59

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Проблема предложения DELETE with ALIAS

Скорее всего, бага. Сегодня в рассылке была похожая бага с алиасами:

mysql> lock tables a read;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from a as b;
ERROR 1100 (HY000): Table 'b' was not locked with LOCK TABLES

Неактивен

 

#11 05.06.2008 14:27:18

EugeneTM
Гуру
Зарегистрирован: 11.04.2008
Сообщений: 89

Re: Проблема предложения DELETE with ALIAS

Igor Panshin написал:

Уточняю состояние в котором происходит ошибка и не только в 6.0, но и в 5.1

Если ты работаешь в текущей БД, определенной connect stopgap, то все корректно

DELETE t1 FROM `stopgap`.`dvfn_link_get` t1; -- ok

Если же текущая отличается от указанной в предложении DELETE,  скажем test, то ппредложение
DELETE t1 FROM `stopgap`.`dvfn_link_get` t1; -- not ok
выдает ошибку

Это было бы можно понять скажем ограничением доступа к другой схеме, но я работаю под root и предложение
DELETE `stopgap`.`dvfn_link_get` FROM `stopgap`.`dvfn_link_get`; -- ok
опять же проходит.

Похоже, что все-таки бага.

Нет, не бага.
http://dev.mysql.com/doc/refman/5.1/en/delete.html

Cross-database deletes are supported for multiple-table deletes, but in this case, you must refer to the tables without using aliases. For example:

DELETE test1.tmp1, test2.tmp2 FROM test1.tmp1, test2.tmp2 WHERE ...

Неактивен

 

#12 05.06.2008 14:31:17

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Проблема предложения DELETE with ALIAS

Ну, можно относиться и не как к баге, раз есть в документации. Так любит делать
Света Смирнова - изменять документацию под известные баги. Но по-человечески - бага smile

Неактивен

 

#13 05.06.2008 14:44:59

EugeneTM
Гуру
Зарегистрирован: 11.04.2008
Сообщений: 89

Re: Проблема предложения DELETE with ALIAS

paulus написал:

Ну, можно относиться и не как к баге, раз есть в документации. Так любит делать
Света Смирнова - изменять документацию под известные баги. Но по-человечески - бага smile

Дык отмазались же smile
Хотя может напрягать в некоторых случаях. Если нужно по одной ссылочной таблице два разных джойна навесить.
Бага короче и нет им пощады.

Неактивен

 

#14 05.06.2008 14:45:37

Igor Panshin
Завсегдатай
Зарегистрирован: 04.06.2008
Сообщений: 62

Re: Проблема предложения DELETE with ALIAS

Cross-database deletes are supported for multiple-table deletes, but in this case, you must refer to the tables without using aliases. For example:

Раз уж здесь такой принцип.
Читаю. КроссБД удаление поддерживается для ...bla-bla Но у меня-то схема. При чем тут БД? Здесь же не написано Cross-schemas deletes ... bla-bla.

Неактивен

 

#15 05.06.2008 14:49:25

EugeneTM
Гуру
Зарегистрирован: 11.04.2008
Сообщений: 89

Re: Проблема предложения DELETE with ALIAS

Igor Panshin написал:

Cross-database deletes are supported for multiple-table deletes, but in this case, you must refer to the tables without using aliases. For example:

Раз уж здесь такой принцип.
Читаю. КроссБД удаление поддерживается для ...bla-bla Но у меня-то схема. При чем тут БД? Здесь же не написано Cross-schemas deletes ... bla-bla.

Есть такая проблема - посты невнимательно читать.

Если база отличается от текущей, необходимо прицепить имя базы. Типа для базы test
test.table

Неактивен

 

#16 05.06.2008 14:49:34

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Проблема предложения DELETE with ALIAS

schema и database - синонимы

Неактивен

 

#17 05.06.2008 15:12:14

Igor Panshin
Завсегдатай
Зарегистрирован: 04.06.2008
Сообщений: 62

Re: Проблема предложения DELETE with ALIAS

EugeneTM написал:

Igor Panshin написал:

Cross-database deletes are supported for multiple-table deletes, but in this case, you must refer to the tables without using aliases. For example:

Раз уж здесь такой принцип.
Читаю. КроссБД удаление поддерживается для ...bla-bla Но у меня-то схема. При чем тут БД? Здесь же не написано Cross-schemas deletes ... bla-bla.

Есть такая проблема - посты невнимательно читать.

Если база отличается от текущей, необходимо прицепить имя базы. Типа для базы test
test.table

Я стараюсь читать внимательно и всегда использую таблицу в виде `database`.`tablename`. Смотри выше. Не было ни одного использования таблиц вне схемы.

Неактивен

 

#18 05.06.2008 15:20:44

EugeneTM
Гуру
Зарегистрирован: 11.04.2008
Сообщений: 89

Re: Проблема предложения DELETE with ALIAS

EugeneTM написал:

Igor Panshin написал:

Уточняю состояние в котором происходит ошибка и не только в 6.0, но и в 5.1

Если же текущая отличается от указанной в предложении DELETE,  скажем test, то ппредложение
DELETE t1 FROM `stopgap`.`dvfn_link_get` t1; -- not ok
выдает ошибку

Это было бы можно понять скажем ограничением доступа к другой схеме, но я работаю под root и предложение
DELETE `stopgap`.`dvfn_link_get` FROM `stopgap`.`dvfn_link_get`; -- ok
опять же проходит.

На тему невнимательно - это я вообще то про себя писал.

В данном случае видимо воспринимает как кросс...
Раз удаление не из текущей базы.
Тут у них вообще достаточно кривенько.
По временным таблицам слегка зацепило.
http://sqlinfo.ru/forum/viewtopic.php?id=645

А что говорить про разные базы.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson