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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [MyISA] INSERT SELECT; UPDATE SELECT; DELETE SELEC 
V
    Опции темы
gcc
Дата 7.8.2009, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 3
Всего: 17



случайно увидел, что MyISA таблицы умеют в месте делать INSERT SELECT в одном запросе

будет ли работать вот такое UPDATE SELECT и DELETE SELECT:
(пока не работает)

Код

DELETE FROM test1
WHERE id = (SELECT id
FROM
  test1
WHERE
  parent = :P
  
UNION
  
SELECT t1.id
FROM
  test1 t1 JOIN test1 t2
    ON t1.parent = t2.id
WHERE
  t2.parent = :P )



Код

UPDATE test1
SET close = 1
WHERE id = (SELECT id
FROM
  test1
WHERE
  parent = :P
  
UNION
  
SELECT t1.id
FROM
  test1 t1 JOIN test1 t2
    ON t1.parent = t2.id
WHERE
  t2.parent = :P )

PM WWW ICQ Skype GTalk Jabber   Вверх
Zloxa
Дата 7.8.2009, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(gcc @  7.8.2009,  19:34 Найти цитируемый пост)
(пока не работает)

where id in (select...



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
gcc
Дата 8.8.2009, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 3
Всего: 17



а скажите можно сделать 2 DELETE и SELECT

чтобы получилоь, что-то вроде бы этого:
как это написать?

Код


DELETE FROM test1 as t10
            FROM test2 as t11
WHERE t10.id = 
            t11.id =
....................??
(SELECT id
FROM
  test1
WHERE
  parent = :P
  
UNION
  
SELECT t1.id
FROM
  test1 t1 JOIN test1 t2
    ON t1.parent = t2.id
WHERE
  t2.parent = :P )



PM WWW ICQ Skype GTalk Jabber   Вверх
Akina
Дата 9.8.2009, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



В хранимой процедуре или функции можно намешать всё, что угодно...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
gcc
Дата 15.8.2009, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 3
Всего: 17



Цитата(Zloxa @ 7.8.2009,  19:58)
where id in (select...

Код

UPDATE section AS t4
                     SET t4.active_se = 1 - t4.active_se
                    WHERE t4.id_se in (SELECT t3.id_se
                     FROM section t3
                    WHERE t3.parent_se_id = 54
                    UNION
 
                  SELECT t1.id_se
                     FROM section t1 
                     JOIN section t2
                      ON t1.parent_se_id = t2.id_se
                    WHERE t2.parent_se_id = 54 )


не работает в чем проблема?

движок пишет:
Код

Caught exception in MyApp::Controller::meneger->active_cs "DBD::mysql::st execute failed: You can't specify target table 't4' for update in 
FROM clause at /home/x0/data4/MyApp/script/../lib/MyApp/Controller/meneger.pm line 241."


PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 15.8.2009, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 3
Всего: 17



Akina, посмотрю процедуру, тут вот http://on-line-teaching.com/sql/sql16.htm написано что можно без процедуры вложный поставить...

а в процедуре можно манипулировать с одной таблицей?

Цитата


    * Incorrectly used table in subquery:

      Error 1093 (ER_UPDATE_TABLE_USED)
      SQLSTATE = HY000
      Message = "You can't specify target table 'x'
      for update in FROM clause"

      This error will occur in cases like this:

      UPDATE t1 SET column2 = (SELECT MAX(column1) FROM t1);

      It's okay to use a subquery for assignment within an UPDATE statement, since subqueries are legal in UPDATE and DELETE statements as well as in
 SELECT statements. However, you cannot use the same table, in this case table t1, for both the subquery's FROM clause and the update target. 

Usually, failure of a subquery causes the entire statement to fail. 



Это сообщение отредактировал(а) gcc - 15.8.2009, 13:21
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 16.8.2009, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 3
Всего: 17



хе-хе

можно же так написать чтобы не делать SELECT UNION

Код

UPDATE section AS t4 LEFT JOIN section t2 ON t4.parent_se_id = t2.id_se
SET t4.active_se = 1 - t4.active_se
WHERE t2.parent_se_id = 54 or t4.parent_se_id = 54 



Это сообщение отредактировал(а) gcc - 16.8.2009, 14:02
PM WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0584 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.