SQl left join 多条件关联

binggeixu 2016-09-20 11:43:36
现有2表,结构和数据分别如下:
表1 tb_Production
ppdt WorkClass GoodsNo ProductionQty
------------ -------------------------------------- ------------------------------------------ -------------------------------
2016/09/19 CN2002 23955718 460.00
2016/09/19 CN2001 23955718 460.00
2016/09/19 C20901 23955718 71600.00

表2: tb_Plan
ppt WorkClass GoodsNo PlanQty PlanDate PlanWorker
------------ -------------------- ------------------------- ---------------------- ------------------------- -------------------------
2016/09/19 CN2002 23955718 460 11.00 32.00
2016/09/19 CN2001 23955718 460 11.00 32.00


希望结果:
ppdt WorkClass GoodsNo ProductionQty PlanQty PlanDate
------------ ------------------ - ------------------------- ----------------------------- --------------------- -----------------------
2016/09/19 CN2002 23955718 460.00 460 11.00
2016/09/19 CN2001 23955718 460.00 460 11.00
2016/09/19 C20901 23955718 71600.00 null null


以表1和表2执行left join链接,用ppt,GoodsNo,WorkClass全作为条件进行查询显示的准确关联的2条数据,如果用1个条件显示3条,但是最后1条数据显示了错误的PlanQty,PlanDate数据?这个链接应该怎样写比较准确‘‘高效呢?谢!
...全文
849 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mr_Nice 2016-09-21
  • 打赏
  • 举报
回复
--> 测试数据: [tb_Production]
if object_id('[tb_Production]') is not null drop table [tb_Production]
create table [tb_Production] (ppdt datetime,WorkClass varchar(6),GoodsNo int,ProductionQty numeric(7,2))
insert into [tb_Production]
select '2016/09/19','CN2002',23955718,460.00 union all
select '2016/09/19','CN2001',23955718,460.00 union all
select '2016/09/19','C20901',23955718,71600.00
--> 测试数据: [tb_Plan]
if object_id('[tb_Plan]') is not null drop table [tb_Plan]
create table [tb_Plan] (ppt datetime,WorkClass varchar(6),GoodsNo int,PlanQty int,PlanDate numeric(4,2),PlanWorker numeric(4,2))
insert into [tb_Plan]
select '2016/09/19','CN2002',23955718,460,11.00,32.00 union all
select '2016/09/19','CN2001',23955718,460,11.00,32.00

select * from [tb_Production]
select * from [tb_Plan]





SELECT  A.ppdt ,
        A.WorkClass ,
        A.GoodsNo ,
        A.ProductionQty ,
        B.PlanQty ,
        B.PlanDate
FROM    [tb_Production] A
        LEFT JOIN [tb_Plan] B ON A.WorkClass = B.WorkClass
                                 AND A.GoodsNo = B.GoodsNo;

/*
ppdt                    WorkClass GoodsNo     ProductionQty                           PlanQty     PlanDate
----------------------- --------- ----------- --------------------------------------- ----------- ---------------------------------------
2016-09-19 00:00:00.000 CN2002    23955718    460.00                                  460         11.00
2016-09-19 00:00:00.000 CN2001    23955718    460.00                                  460         11.00
2016-09-19 00:00:00.000 C20901    23955718    71600.00                                NULL        NULL
*/
卖水果的net 2016-09-21
  • 打赏
  • 举报
回复
C20901 这个数据,在表2 中没有匹配的行,所以后两个这段显示为 null ,这个是对的;
「已注销」 2016-09-21
  • 打赏
  • 举报
回复
为什么不能加时间进行判断呢?

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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