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

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

有沒有更好的方法返回不在表 Sql 中的列表值?

有沒有更好的方法返回不在表 Sql 中的列表值?

PHP
慕尼黑的夜晚無繁華 2023-07-08 17:45:44
我有一個數字列表,例如 [300420,300421,300422,300423],以及一個包含從 300000 到 400000 的所有值(300422 和 300423 除外)的表。我需要從列表中返回不在表中的第一個值,現在我正在使用以下代碼,但它太慢了。foreach ($notas as $tuple) {    $key = $tuple[0];    $value = $tuple[1];    if ($value) {        $res = $PDO2->query("SELECT DISTINCT Num_Nota FROM itensnfs WHERE Num_Nota='$value'");        $counter_codes = ($res->rowCount());                if($counter_codes == 0){            echo "Value " .$value. " don't exist";            die();                  }    }}
查看完整描述

1 回答

?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

您可以枚舉派生表中的值,然后使用not exists和聚合:


select min(v.num) num

from (

    select 300420 num

    union all select 300421

    union all select 300422

    union all select 300423

) v

where not exists (select 1 from itensnfs i where i.Num_Nota = v.num)

根據您的數據庫,有更簡潔的替代方案union all 來生成派生表。


一些數據庫支持行構造函數values():


select min(v.num) num

from (values (300420), (300421), (300422), (300423)) v(num)

where not exists (select 1 from itensnfs i where i.Num_Nota = v.num)

MySQL 是一個值得注意的例外 - 但最近的版本支持values row():


select min(v.num) num

from (values row (300420), row (300421), row (300422), row (300423)) v(num)

where not exists (select 1 from itensnfs i where i.Num_Nota = v.num)


查看完整回答
反對 回復 2023-07-08
  • 1 回答
  • 0 關注
  • 150 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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