Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > [MyISA] INSERT SELECT; UPDATE SELECT; DELETE SELEC


Автор: gcc 7.8.2009, 19:34
случайно увидел, что 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 )

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

where id in (select...

Автор: gcc 8.8.2009, 00:30
а скажите можно сделать 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 )



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

Автор: gcc 15.8.2009, 09:47
Цитата(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."


Автор: gcc 15.8.2009, 11:10
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 16.8.2009, 14:02
хе-хе

можно же так написать чтобы не делать 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 


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)