0

如果表中的数据是:

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

谢谢!!

4

1 回答 1

0

我不太了解您的用例,但是像下面这样的查询使您能够

  1. .. 以预定义的顺序获取结果
  2. .. 识别结果集中的行

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
于 2012-09-12T16:04:12.483 回答