我有一张桌子&垫子。列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 ++ /任何代码)来获取正确的数据,但是性能会有很大的下降,这非常关键。有什么建议?可能吗?帮助赞赏!
答案 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
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;