我有两个表drivers
和drivers_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/