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

SQL Server中如何从两张不同表中查询选取指定列数据

SQL Server跨两张含PartNumber列表取数实现方法

你当前编写的语句存在语法错误:SQL中不支持使用AND直接拼接两个独立的SELECT查询块,需要根据实际业务要的结果形态,选择对应写法:

写法1:关联匹配取横向拼接的结果

如果你的需求是获取PartNumber=44320对应的订单详情,同时匹配拿到该零件的库存数据,也就是把两张表匹配到的同零件行的字段横向拼到同一行结果里,使用JOIN关联即可:

-- 取OrderDetails所有字段+匹配到的Items表库存字段
SELECT od.*, i.Stock
FROM OrderDetails od
INNER JOIN Items i
  ON od.PartNumber = i.PartNumber -- 两张表通过PartNumber列匹配
WHERE od.PartNumber = 44320
  • 如果需要保留OrderDetails中所有PartNumber=44320的记录,哪怕Items表中没有该零件的库存数据,把语句里的INNER JOIN替换为LEFT JOIN即可。

写法2:结果集纵向合并

如果你的需求是分别从两张表查数据,把两个查询的结果上下拼接成同一个结果集返回,需要保证两个查询返回的列数量、对应列的数据类型一致,使用UNION ALL实现:

-- 从OrderDetails取指定列
SELECT 
  PartNumber,
  OrderQty AS DataValue,
  'OrderDetail' AS DataSource -- 标记数据来源
FROM OrderDetails
WHERE PartNumber = 44320

UNION ALL -- 纵向拼接两个结果集

-- 从Items取对应结构的列
SELECT
  PartNumber,
  Stock AS DataValue,
  'ItemStock' AS DataSource
FROM Items
WHERE PartNumber = 44320
  • UNION ALL不会对合并后的结果做去重处理,性能更好;如果需要剔除完全重复的行,可以替换为UNION。

注意事项

  • 非必要不要使用SELECT *查询,建议明确列出实际需要的字段,减少不必要的性能开销,也能避免表结构变动时返回不符合预期的字段。
  • 写JOIN关联时必须带上ON后的匹配条件,漏写条件会生成笛卡尔积,返回大量无效冗余数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:54:07