2

我有两张桌子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   |
+--------------+

司机姓名

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

1 回答 1

2

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

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
于 2012-08-01T11:18:37.390 回答