Re: Fwd: Unexpected Multiple Records from Randomized Query
В списке pgsql-general по дате отправления:
| От | Tom Lane |
|---|---|
| Тема | Re: Fwd: Unexpected Multiple Records from Randomized Query |
| Дата | |
| Msg-id | 813880.1708700965@sss.pgh.pa.us обсуждение исходный текст |
| Ответ на | Fwd: Unexpected Multiple Records from Randomized Query (김명준 <audwns525@gmail.com>) |
| Список | pgsql-general |
=?UTF-8?B?6rmA66qF7KSA?= <audwns525@gmail.com> writes:
> explain analyze
> SELECT * FROM users WHERE name = 'User '||trunc(random()*100) ;
> I expected the result to return one record. However, in some cases, the
> result comes back with 2 or 3 records. What am I doing wrong?
random() is re-evaluated at each row, so it's not that surprising
if you sometimes get multiple matches. This is the same behavior
that you relied on to fill the table with not-all-the-same names.
The preferred way to avoid that is to stuff the random() call into
a CTE:
WITH x AS (SELECT random() AS r)
SELECT * FROM users, x WHERE name = 'User '||trunc(r*100) ;
or in this case better to shove the whole constant computation
into the CTE.
regards, tom lane
В списке pgsql-general по дате отправления:
Сайт использует файлы cookie для корректной работы и повышения удобства. Нажимая кнопку «Принять» или продолжая пользоваться сайтом, вы соглашаетесь на их использование в соответствии с Политикой в отношении обработки cookie ООО «ППГ», в том числе на передачу данных из файлов cookie сторонним статистическим и рекламным службам. Вы можете управлять настройками cookie через параметры вашего браузера