如何批量查询ORDERS表中不存在的po_number?
批量查找不存在于ORDERS表中的PO编号
方法1:通过VALUES构造临时数据集+LEFT JOIN
直接把所有待检查的PO编号构造为虚拟表,和ORDERS表左连接后筛选无匹配的记录:
SELECT po.po_number, 'DNE' AS status FROM ( VALUES ('870043334'), ('871280502'), ('871414230') ) AS po(po_number) LEFT JOIN orders o ON o.po_number = po.po_number WHERE o.po_number IS NULL;
方法2:通过VALUES+NOT EXISTS子查询
逻辑和你原有的IF EXISTS一致,但实现批量处理:
SELECT po.po_number, 'DNE' AS status FROM ( VALUES ('870043334'), ('871280502'), ('871414230') ) AS po(po_number) WHERE NOT EXISTS ( SELECT 1 FROM orders o WHERE o.po_number = po.po_number AND o.po_number IS NOT NULL );
方法3:用临时表处理大量PO
如果待检查的PO数量较多,先将PO导入临时表再查询更便捷:
-- 创建临时表(字段类型需与ORDERS表的po_number一致) CREATE TABLE #TempPOs (po_number VARCHAR(20)); -- 插入所有待检查的PO INSERT INTO #TempPOs (po_number) VALUES ('870043334'), ('871280502'), ('871414230'); -- 筛选不存在的PO SELECT t.po_number, 'DNE' AS status FROM #TempPOs t LEFT JOIN orders o ON o.po_number = t.po_number WHERE o.po_number IS NULL; -- 清理临时表 DROP TABLE #TempPOs;
以上方法都能一次性返回所有不存在的PO记录,无需逐个编写判断语句,执行效率也优于批量单条查询。
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

