2

私は2つのテーブルdriversdrivers_names. 私が望むのは、最初のテーブルから選択したすべてのドライバーが 2 番目のテーブルからランダムな名前を持つことですが、結果のすべてのドライバーに対して 1 つの名前が得られます。はい、毎回異なりますが、すべての人に 1 つです。これが私のクエリです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     |
+-------------+
4

1 に答える 1

2

技術的にすべての行に対してサブセレクトを評価する理由がないため、Postgres はサブセレクトをおそらく 1 回だけ評価します。次のように、ドライバー テーブルの列をサブセレクトに参照することで強制的に実行できます。

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 に答える