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

Postgresql:第二个表中所选列的随机值,sql,postgresql,Sql,Postgresql,我有两张表,分别是drivers和drivers\u。我希望从第一个表中选择的每个驱动程序从第二个表中有一个随机名称,但我得到的是结果中所有驱动程序的一个名称。是的,每次都不一样,但都是一对一。这是我的查询,我使用的是postgresql 选择 drivers.drivers\u id作为drivers\u drivers\u id, 选择 驱动程序名称 从…起 司机姓名 按随机极限排序1 作为司机的名字 从…起 司机 结果: 11 Denis 13 Denis 7 Denis 表结构

我有两张表,分别是drivers和drivers\u。我希望从第一个表中选择的每个驱动程序从第二个表中有一个随机名称,但我得到的是结果中所有驱动程序的一个名称。是的,每次都不一样,但都是一对一。这是我的查询,我使用的是postgresql

选择 drivers.drivers\u id作为drivers\u drivers\u id, 选择 驱动程序名称 从…起 司机姓名 按随机极限排序1 作为司机的名字 从…起 司机 结果:

11  Denis
13  Denis
7   Denis
表结构

司机

司机姓名


Postgres可能只对subselect求值一次,因为从技术上讲,没有理由对每一行求值。 您可以通过将drivers表中的列引用到subselect中来强制执行,如下所示:

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

如果您将显示这两个表的结构,这将很有帮助。@HussainNagri我为这两个表添加了结构。您还可以将random+drivers.oid::integer放在一起,这可能是一个更通用的解决方案,适用于我的id是字母数字的所有情况
+-------------+
| column_name |
+-------------+
| name_id     |
| name_en     |
+-------------+
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