如果表格中的数据是:
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
谢谢!
答案 0 :(得分:0)
我不太了解您的用例,但是如下所示的查询使您能够
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