加入三個表場景... 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