加入三个表场景... STORE获取LIST。 'LIST'基本上是需要计数的商店库存SKU的集合。如何使用NOT IN CLAUSE
当商店从指定给它的给定List开始计数SKU时,信息被保存在另一个名为'StoreCycles'的表中,该表记录了ListId,StoreName和计数开始和完成的日期。
这些是我的表格。
表1中。表与“词典”,其具有一个主键“ListId”
ListId ListName
1 abc
2 def
3 ghi
表2“商店” - 从上面的表中的每个列表(“列表”表)被分配给一个或多个商店。 “商店”表中的ListId是“列表”表格的主键。 Listid和LineId一起组成外键。
ListId LineId StoreName
1 1 StoreA
1 2 StoreD
2 1 StoreB
2 2 StoreC
2 3 StoreA
3 1 StoreA
表3.'StoreCycles' - 当分配给商店的列表开始计数并完成时,它会保存。
ListId StoreName StartDate CompleteDate
1 StoreA 2016-7-22 2016-7-22
2 StoreA 2016-7-22
2 StoreC 2016-7-22
在任何时候我想拉起那些尚未完成的名单,即他们有一个空的完整日期。
这是我的查询:
Select T0.ListId,
T0.ListNaame ,
T2.StartDate
From Lists T0
JOIN Stores T1 On T0.ListId = T1.ListId
LEFT JOIN StoreCycles T2 ON T0.ListId = T2.ListId
WHERE T1.StoreName = 'StoreA'
AND T0.ListId NOT IN (SELECT ListId FROM StoreCycles WHERE CompleteDate IS NOT NULL)
结果应该是>>
ListId ListName StartDate
2 def 2016-7-22
3 ghi NULL
但我得到的是这种
ListId ListName StartDate
2 def NULL
2 def NULL
3 ghi NULL
你在结果集中有字段'ListName'作为整数,但是你的数据显示字段是'abc'。请更正您的问题,以显示您想查询的结果:“LineId”或“ListName” – Tony
我试过了您的查询,它给出了应该的结果。至少如果CompleteDate是日期字段。你能否检查一下,如果CompleteDate不是一些带空格的varchar,那里应该是null的? – LukStorms
我也试过了你的查询(http://sqlfiddle.com/#!9/913ce/2),它给出的结果与你所期望的相似 - 虽然列表_name_与你在例子中给出的_id不同。 – Tony