Подзапрос с random() в PostgreSQL

Jul 18, 2012 15:17


Как можно было предположить, подзапрос выполняется один раз, если никак не зависит от основного запроса. А про то, что random() должна выдавать для разных строк основного запроса разные результаты, как если бы она от него зависела, Постгре не догадывается. Приходится обманывать СУБД, вписывая в подзапрос какую-нибудь псевдозависимость, вроде WHERE ( Read more... )

postgresql

Leave a comment

Comments 10

morruth July 18 2012, 11:38:49 UTC
Мнээ, а на сам запрос глянуть можно?

Reply

torbasow July 18 2012, 11:49:58 UTC

Если я его ещё не удалил… А, вот, только имена таблиц заменю для конспирации:

SELECT id, (SELECT id FROM enterprises OFFSET floor(2000*random()+1) LIMIT 1) FROM contracts

Reply

morruth July 18 2012, 12:05:23 UTC
хмм, а эти таблицы между собой как-то связаны?
А то я не понимаю, что именно хочется вытащить

Reply

torbasow July 18 2012, 12:28:56 UTC

На самом деле, мне в конечном счёте нужен был 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

Up