Вложенные SQL запросы: одновременное добавление одинарных и множественных строк в INSERT

Понадобилось для одной задачи сделать выборку из таблицы А по определенным условиям и вставить ее в таблицу B.
Можно особо не заморачиваться, сделать SELECT  в переменную, потом пройтись циклом по INSERT и все.

Но это не очень красивое решение. Очень запросов много + на переменные память расходуется. Проще использовать вложенные запросы, они же nested queries. Но тут возникает проблемка —  если вставлять  только данные из INSERT, то все ок, но если добавлять еще и какие-нибудь неизменные значения, то выдается Subquery returned more than 1 value.

Чтобы не обьяснять на пальцах — сама таблица B

CREATE TEMPORARY TABLE `B` (
  `status` TINYINT(4) NULL DEFAULT NULL ,
  `pair` TEXT NULL DEFAULT NULL ,
)
ENGINE = MyISAM
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;

Копируем из таблицы A и вставляем в B так

INSERT INTO `B` (`pair`) 
            SELECT `pair` FROM `A` ORDER BY RAND() LIMIT 100;

Если поле status имеет неизменное значение, например 123, то просто вот так уже не вставить

INSERT INTO `B` (`status`, `pair`) VALUES (
            (SELECT `pair` FROM `A` ORDER BY RAND() LIMIT 100),
            123);

Не совсем красивое решение нашел

UPDATE `B` SET `status` = '123' WHERE 1=1;

Но хотелось бы в одну строку все заделать. Отпишитесь плиз в коментах, кто знает, как реализовать.

5.00 avg. rating (90% score) - 1 vote

5 комментариев

  • А вот так разве нельзя:
    INSERT INTO `B` (`pair`, ‘status’)
    SELECT `pair`, 123 FROM `A` ORDER BY RAND() LIMIT 100;

  • Дык просто же всё

    INSERT INTO `B` (`status`, `pair`) 
    (SELECT 123 as status, `pair` FROM `A` ORDER BY RAND() LIMIT 100); 

     Вставлено строк: 100. ( запрос занял 0.0023 сек. )
     

  • seoshmeo , в A нет такого столбца

    Dmitry, все гениальное просто )) Как я сам не додумался, ведь очевидно же. Спасибо

  • Спасибо, возьмем на заметку. Полезный код!

  • Помогите, схожая проблема, есть таблица table в ней столбы A, B со множеством строк. Так вот мне надо в этот table добавить еще строки: в столбец A рандомно из столбца B, а в столбец B тоже рандомно из столбца A.

    Спасибо.

css.php