如何在SQL中使用重复的非唯一查询值返回多行?

时间:2017-10-10 10:26:04

标签: sql postgresql

我有一张桌子&垫子。列x,y,数据,其中(x,y)是多列主键,因此表包含矩阵形式的数据。问题是当我有一个" vector"时,如何选择多行。密钥对可以有重复对:

SELECT x,y,data FROM mat WHERE (x,y) IN ((0,0),(0,0),(1,1));

显然会返回

x | y | data
--+---+-----
0 | 0 | 5
1 | 1 | 7

而我需要:

x | y | data
--+---+-----
0 | 0 | 5
0 | 0 | 5
1 | 1 | 7

我可以从外部循环密钥对(用c ++ /任何代码)来获取正确的数据,但是性能会有很大的下降,这非常关键。有什么建议?可能吗?帮助赞赏!

2 个答案:

答案 0 :(得分:3)

我认为你需要一个public HttpResponseMessage GetByMsn(string msn, DateTime dt) { try { var before = dt.AddMinutes(-5); var after = dt.AddMinutes(5); var result = medEntitites.tj_xhqd .Where(m => m.zdjh == msn && m.sjsj >= before && m.sjsj <= after) .Select(m=> new { m.zdjh , m.sjsj, m.xhqd }).Distinct()); return Request.CreateResponse(HttpStatusCode.Found, result); } catch (Exception ex) { return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex); } }

JOIN

demo

SELECT mat.x,mat.y,data FROM mat JOIN ( SELECT 0 x, 0 y UNION ALL SELECT 0 x, 0 y UNION ALL SELECT 1 x, 1 y ) t ON t.x = mat.x and t.y = mat.y 仅针对每一行评估为IN / true / false,但无法将您的数据相乘。

答案 1 :(得分:1)

Radim有正确的想法。我更喜欢这种语法:

SELECT m.*
FROM mat m JOIN 
     (VALUES (0, 0), (0, 0), (1, 1)) v(x, y)
     ON m.x = v.x and m.y = v.y;