我有一个表'mat',其中x,y,data列,其中(x,y)是多列主键,因此该表包含矩阵形式的数据。问题是当我有一个键对的“向量”并且可能有重复的键对时,如何选择多行:

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++/任何代码中)以获得正确的数据,但是存在一个主要的性能下降,这非常关键。有什么建议吗?有可能吗?感谢帮助!

最佳答案

我想你需要一个

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

demo
对于每一行,JOIN的计算结果是IN/true/false,它不能与您的数据相乘。

关于sql - 如何在SQL中重复非唯一查询值返回多行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46664409/

10-16 03:40