You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写MS SQL查询筛选符合特定状态条件的Table A记录?

满足需求的MS SQL查询语句

现有数据表

Table A

ItemNo  Name
1       Item1
2       Item2
3       Item3
4       Item4

Table B

ItemNo  Status
1       available
1       onhold
1       Sold
1       Transit
------------------
2       available
2       onhold
2       Sold
-----------------
3       Transit
-----------------
4       onhold

Table B包含四种状态:onhold、available、sold、Transit。

需求说明

仅获取Table A中在Table B里对应ItemNo存在available或Transit状态的记录。

预期输出

ItemNo  Name            
1       Item1       
2       Item2
3       Item3

查询语句

以下几种方式均可实现需求:

方式一:IN子查询

SELECT a.ItemNo, a.Name
FROM TableA a
WHERE a.ItemNo IN (
    SELECT DISTINCT b.ItemNo
    FROM TableB b
    WHERE b.Status IN ('available', 'Transit')
);

方式二:JOIN + DISTINCT

SELECT DISTINCT a.ItemNo, a.Name
FROM TableA a
JOIN TableB b ON a.ItemNo = b.ItemNo
WHERE b.Status IN ('available', 'Transit');

方式三:EXISTS子查询

SELECT a.ItemNo, a.Name
FROM TableA a
WHERE EXISTS (
    SELECT 1
    FROM TableB b
    WHERE b.ItemNo = a.ItemNo
      AND b.Status IN ('available', 'Transit')
);

补充说明

  • 三种方式核心逻辑一致:先过滤出Table B中状态符合要求的ItemNo,再匹配Table A的对应记录。
  • DISTINCT用于避免Table B中同一ItemNo对应多条符合条件的状态时,Table A记录被重复返回(若业务无重复风险可省略)。
  • EXISTS方式在数据量较大时性能更优,因为它找到匹配项后就停止检索,无需返回所有符合条件的行。

内容的提问来源于stack exchange,提问作者Deepak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 18:48:38