2012-08-01 18 views
2

我有兩個表driversdrivers_names。我想要的是我從第一個表中選擇的每個驅動程序都有一個隨機名稱,但是我得到的是結果中所有驅動程序的名稱。是的,每次都是不同的,但只有一個人。這是我的查詢,我正在使用postgresqlPostgresql:所選列的隨機值frm第二個表

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

如果將顯示兩個表的結構,這將是有幫助的。 – Nagri 2012-08-01 06:53:00

+0

@HussainNagri我添加了兩個表的結構。 – bozhidarc 2012-08-01 07:07:09

回答

2

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 
+0

你也可以把'random()+ drivers.oid :: integer'這可能是所有情況下更一般的解決方案(我的'id'是字母數字) – arod 2015-05-22 19:23:58

相關問題