我有两张表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 |
+-------------+
答案 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