求SQL语句 ,多对多查询

Sam大哥 2012-09-25 06:11:38
有两张表如下,一张价格表,一张销售订单表,求一语句,查询指定销售订单记录中在销售价格表中不存在的记录(不存在是指不存在物料或存在物料,但价格不等),备注:同一订单上有多条不同物料的记录,价格表中也同一物料也存在多条记录



价格表
物料ID 客户ID 销售单价
A 10001 1.2
A 10001 1.4
A 10001 1.5
B 20001 20
B 20001 22
B 20001 25
C 。。。。

销售订单表
订单号 客户ID 物料ID 物料数量 物料单价
S0001 10001 A 2000 1.2
S0001 10001 A 1000 1.8
S0001 20001 B 1000 22
S0001 20001 B 3000 25
...全文
238 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
百年树人 2012-09-25
  • 打赏
  • 举报
回复
if object_id('[价格表]') is not null drop table [价格表]
go
create table [价格表]([物料ID] varchar(1),[客户ID] int,[销售单价] numeric(3,1))
insert [价格表]
select 'A',10001,1.2 union all
select 'A',10001,1.4 union all
select 'A',10001,1.5 union all
select 'B',20001,20 union all
select 'B',20001,22 union all
select 'B',20001,25
go
if object_id('[销售订单表]') is not null drop table [销售订单表]
go
create table [销售订单表]([订单号] varchar(5),[客户ID] int,[物料ID] varchar(1),[物料数量] int,[物料单价] numeric(3,1))
insert [销售订单表]
select 'S0001',10001,'A',2000,1.2 union all
select 'S0001',10001,'A',1000,1.8 union all
select 'S0001',20001,'B',1000,22 union all
select 'S0001',20001,'B',3000,25 union all
select 'S0001',20001,'C',2000,25 --为测试增加的记录
go

-->查询:
select * from 销售订单表 t
where not exists(select 1 from 价格表 where 物料ID=t.物料ID and 销售单价=t.物料单价)

/**
订单号 客户ID 物料ID 物料数量 物料单价
----- ----------- ---- ----------- ---------------------------------------
S0001 10001 A 1000 1.8
S0001 20001 C 2000 25.0

(2 行受影响)
**/
以学习为目的 2012-09-25
  • 打赏
  • 举报
回复
SELECT *
FROM 销售订单表 a
WHERE NOT EXISTS (SELECT *
FROM 价格表 b
WHERE b.物料id = a.物料id
AND b.客户id = a.客户id
AND b.销售单价 = a.物料单价)


这个你测试了吗?
极品老土豆 2012-09-25
  • 打赏
  • 举报
回复

select * from 销售订单表 x left outer join 价格表 j on x.物料ID = j.物料ID
where j.物料id is null or j.销售单价<>x.物料单价
DBA_磊仔 2012-09-25
  • 打赏
  • 举报
回复

select * from 销售订单表 a where not exists(select * from 价格表 where
物料ID = a.物料ID and 客户ID = a.客户ID and 销售单价 = a.物料单价
)

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧