sql - Postgresql:从第二个表中选择的列的随机值

标签 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     |
+-------------+

最佳答案

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

关于sql - Postgresql:从第二个表中选择的列的随机值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11753873/

相关文章:

sql - 在rails中批量创建记录?

sql - Ecto 的片段编译错误

sql - 条件 CASE 语句语法

SQL 连接与 SQL 子查询(性能)?

sql - 如何找出员工的第二高薪水?

regex - PostgreSQL 检查约束不起作用

sql - 通过存储过程更新数据

django - 如何在 Django 中使用 postgresql 'interval'?

bash - Heroku - 将控制台输出重定向到 Logentries

ruby-on-rails - 如何按标题的第一个字母对 100 万条记录的列表进行排序