Postgresql:第二个表选择的列的随机值

时间:2012-08-01 06:43:09

标签: sql postgresql

我有两张表driversdrivers_names。我想要的是我从第一个表中选择的每个驱动程序都有一个随机名称,但我得到的是结果中所有驱动程序的一个名称。是的,它每次都不同,但对所有人来说都是一样的。这是我的查询,我正在使用postgresql

SELECT
    drivers.driver_id AS drivers_driver_id,
    (
        SELECT
            drivers_names.name_en
        FROM
            drivers_names
        ORDER BY random() LIMIT 1
    ) AS driver_name
FROM
    drivers

结果:

11  Denis
13  Denis
7   Denis

表格结构。

驱动器

+--------------+
| column_name  |
+--------------+
| driver_id    |
| property_1   |
| property_2   |
| property_3   |
+--------------+

drivers_names

+-------------+
| column_name |
+-------------+
| name_id     |
| name_en     |
+-------------+

1 个答案:

答案 0 :(得分:2)

Postgres可能只评估子选择一次,因为从技术上讲,没有理由对每一行进行评估。 您可以通过将drivers表中的列引用到子选择中来强制它,如下所示:

SELECT
    drivers.driver_id AS drivers_driver_id,
    (
        SELECT
            drivers_names.name_en
        FROM
            drivers_names
        ORDER BY random()+drivers.driver_id LIMIT 1
    ) AS driver_name
FROM
    drivers