Подзапросы с UPDATE

Тема в разделе "Базы данных", создана пользователем kud, 17 май 2011.

Модераторы: latteo
  1. kud

    kud Постоялец

    Регистр.:
    18 фев 2009
    Сообщения:
    89
    Симпатии:
    11
    Кто в курсе как одним запросом сделать что-то вроде:
    Код:
    UPDATE tablename SET column = 'some_value' WHERE id IN(SELECT id FROM tablename ORDER BY RAND())LIMIT 3000
    ?
     
  2. horpah

    horpah

    Регистр.:
    21 июн 2010
    Сообщения:
    200
    Симпатии:
    55
    Не знаю как остальные БД но MySQL будет ругаться. SELECT + UPDATE в 1 запросе не пройдет, придется делить на 2.
     
  3. DrakonHaSh

    DrakonHaSh

    Регистр.:
    29 июн 2010
    Сообщения:
    358
    Симпатии:
    122
    Код:
    UPDATE tablename SET column = 'some_value' WHERE id IN(SELECT id FROM tablename ORDER BY RAND())LIMIT 3000
    LIMIT 3000 в не правильном месте стоит, надо так:
    Код:
    UPDATE tablename SET column = 'some_value' WHERE id IN(SELECT id FROM tablename ORDER BY RAND() LIMIT 3000)
    
    хотя не уверен что и ткой вариант прокатит
     
  4. namak

    namak Создатель

    Регистр.:
    27 фев 2010
    Сообщения:
    13
    Симпатии:
    0
    юзайте другую СУБД, мускул для такого кол-ва данных не подет)
     
  5. DiX2007

    DiX2007 Создатель

    Регистр.:
    2 сен 2007
    Сообщения:
    20
    Симпатии:
    3
    MySQL без проблем поддерживает подзапросы в UPDATE, только нельзя обращаться в подзапросе к таблице, которая обновляется.
     
  6. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    Код:
    UPDATE tablename AS t1,
    (
    SELECT id FROM tablename ORDER BY RAND() LIMIT 3000
    ) AS t2
    SET t1.`column` = 'some_value' 
    WHERE t1.id = t2.id