MySQL 只获取 3 列之间条件的第一个匹配项

我正在使用可以访问 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 1

A1 B3 1

JSON 格式:


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 过滤器很重要。


MYYA
浏览 112回答 1
1回答

叮当猫咪

一种方法使用相关子查询进行过滤:select t.*from table_01 twhere 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) twhere rn = 1
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript