Как можно было предположить, подзапрос выполняется один раз, если никак не зависит от основного запроса. А про то, что random() должна выдавать для разных строк основного запроса разные результаты, как если бы она от него зависела, Постгре не догадывается. Приходится обманывать СУБД, вписывая в подзапрос какую-нибудь псевдозависимость, вроде WHERE
(
Read more... )
Comments 10
Reply
Если я его ещё не удалил… А, вот, только имена таблиц заменю для конспирации:
SELECT id, (SELECT id FROM enterprises OFFSET floor(2000*random()+1) LIMIT 1) FROM contracts
Reply
А то я не понимаю, что именно хочется вытащить
Reply
На самом деле, мне в конечном счёте нужен был UPDATE, как раз чтобы их и связать:
UPDATE contracts AS c SET id_enterprise=(SELECT id FROM enterprises WHERE c=c OFFSET floor(2000*random()+1) LIMIT 1) WHERE random()<0.666
…Чтобы привязать примерно две трети контрактов к случайно выбранным из двух тысяч предприятиям.
Reply
Leave a comment