我正在使用可以访问 MySQL 数据库的 API REST (NodeJS)。在此数据库中,有一个如下所示的表(我们将其命名为Table_01):| C_0| C_1| C_2| C_3| | 1 | A1 | B1 | 1 || 2 | A1 | B2 | 0 || 3 | B1 | A1 | 0 || 4 | A2 | B1 | 0 || 5 | B2 | A1 | 1 || 6 | B1 | A1 | 0 || 7 | B3 | A1 | 0 || 8 | A1 | B3 | 1 || 9 | A3 | B1 | 0 || 10 | A1 | B3 | 1 || 11 | A1 | B1 | 0 |我的目标是为 C_1 和 C_2 中的一对值在 C_3 上获得 Value = 1 的第一个匹配。让我们举个例子。我想知道在什么情况下A_1 在 C_1 中,在 C_3 中有 1(仅第一个匹配)所以,在这种情况下,结果应该是:A1 B1 1A1 B3 1JSON 格式:result = [ { "C_1": "A1", "C_2": "B1", "C_3": "1", }, { "C_1": "A1", "C_2": "B3", "C_3": "1", }];我不想收到第二个两次,因为 A1 B3 = 1 在表中包含了两次。我这样做可以得到结果:db.query('SELECT * FROM `Table_01` WHERE (`C_1` = A1 AND `C_2` = '+db.escape(value)+') AND `C_3` = 1', (err, res) => { .. });但这会给我第三个条目,其中包含重复的 A1 B3 1。显然,在这个例子中并不是很重要。但是对于一个充满行的表,这对于避免非常大的响应和后验 JS 过滤器很重要。
1 回答
叮当猫咪
TA贡献1776条经验 获得超12个赞
一种方法使用相关子查询进行过滤:
select t.*
from table_01 t
where t.id = (
select min(t1.id)
from table_01 t1
where t1.c_1 = t.c_1 and t1.c_2 = t.c_2 and t1.c_3 = 1
)
如果您运行的是 MySQL 8.0,您还可以使用窗口函数:
select *
from (
select t.*,
row_number() over(partition by c_1, c_2 order by id) rn
from mytable t
where c_3 = 1
) t
where rn = 1
添加回答
举报
0/150
提交
取消