DELETE ... WHERE ID IN (...)
заявки. Оказа се, че има групиращ функция (от MySQL 4.1 нататък) - GROUP_CONCAT()
. Веднага пример:
mysql> SELECT GROUP_CONCAT(id) FROM users;
+-------------------------------+
| GROUP_CONCAT(id) |
+-------------------------------+
| 2358,2360,2362,2366,2368,2376 |
+-------------------------------+
1 row in set (0.00 sec)
Готино! :)
Редакция:
Една малка особеност на
GROUP_CONCAT
- оказа се, че върнатия резултат е VARCHAR
, следователно списъка не може да бъде по-голям от 255 символа. За да се преодолее това ограничение е достатъчно да изпълните:
mysql> SET SESSION group_concat_max_len = 20000;
4 коментара:
За конкретния случай няма смисъл от GROUP_CONCAT(), може да ползваш направо:
DELETE ... WHERE ID IN (SELECT id FROM users);
Готин блог, btw!
Да, ама не! (съжалявам за клишето). MySQL е друг тип животно - нищо общо със северния елен. Цитирам:
Currently, you cannot delete from a table and select from the same table in a subquery.
Ей, благодарско..тва за GROUP_CONCAT() го бях чел преди много време в нечий блог..и наскоро като ми трябваше само смътно си споних че има такова животно но не можах да го намеря(макар че се порових из ръководството). Бутам блога в GReader-а и вече ще има как до го възстановя ако пак успея да го забравя :)
@krasio
И аз така - все го забравям. Редактирах публикацията за една малка особеност, с която се сблъсках снощи.
Публикуване на коментар