postgres选择结果

时间:2012-09-12 15:48:27

标签: postgresql select sequence

如果表格中的数据是:

select * from data;

 key  | value                    
------+---------
 a    | a_value
 b    | b_value
 c    | c_value
 d    | d_value
 e    | e_value
 f    | f_value

如果一个客户端连接到我的Web服务器并询问a的值,我的应用程序将尝试执行此操作:

select value where key = 'c';

并将结果值发送到客户端

如果3个客户端连接到我的Web服务器,则会发生3个语句,

  select value where key = 'e';  # client 1

  select value where key = 'c';  # client 2

  select value where key = 'a';  # client 3

出于资源原因,我想将许多语句合并到一个select语句中。

select * where key = 'e' or key = 'c' or key = 'a';

 key  | value                    
------+---------
 a    | a_value
 c    | c_value
 e    | e_value

但问题是结果的顺序与我的WHERE子句不一样。 所以我无法将结果与客户的查询区分开来。 如果我想将价值发回给客户

'e_value' to client 1
'c_value' to client 2
'a_value' to client 3

谢谢!

1 个答案:

答案 0 :(得分:0)

我不太了解您的用例,但是如下所示的查询使您能够

  1. ..以预定义的顺序获得结果
  2. ..识别结果集中的行
  3. SELECT v.*, d.value
    FROM   data
    JOIN  (
       VALUES
         (1::int, 'e'::text)  -- explicit cast may not be necessary
        ,(2, 'c')
        ,(3, 'a')
        ) v(client, key) USING (key)
    ORDER  BY v.client;
    

    返回:

    client | key | value
    -------+-----+------
    1      | e   | e_value
    2      | c   | c_value
    3      | a   | a_value