亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

MySQL 只獲取 3 列之間條件的第一個匹配項

MySQL 只獲取 3 列之間條件的第一個匹配項

MYYA 2023-08-10 10:50:36
我正在使用可以訪問 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


查看完整回答
反對 回復 2023-08-10
  • 1 回答
  • 0 關注
  • 158 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號