我一直在試圖弄清楚如何查詢購物車數據庫來查找所有包含有形物品的訂單(物品可以下載,因此未發貨),這些訂單尚未分配到UPS跟蹤標籤。我一直無法做到。ShoppingCart的複雜SQL查詢
相關表如下:
// dbo.Inventory - details about the individual product being sold
- ProductID int primary - Name nvarchar - IsDownloadable bit -
| 5 | Awesome Shirt | 0 |
| 7 | An Audio Track | 1 |
// dbo.ShoppingCart --("ShopID" groups the items in the cart)
- CartID int primary - ProductID int - ShopID char (guid) - Quantity int -
| 2 | 5 | e854a982c9264a72 | 4 |
| 3 | 7 | e854a982c9264a72 | 1 |
// dbo.Orders - Order information (shipping address, etc)
- OrderID int primary - ShopID char(x) - BillingInfoColumns -
| 13 | e854a982c9264a72 | Name,Address,etc |
// dbo.Tracking - Shipments' (note: a shipment can contain several items) tracking numbers
- TrackingID int primary - OrderID int - TrackingNumber char(x) -
| 5 | 13 | Ze5Whatever... |
// dbo.ShippedItems - Maps a ShoppingCart's shipped items to tracking numbers
- ShippingID int primary - TrackingID int - CartID int - QuantityInShipment int
| 6 | 5 | 2 | 3 |
希望上面提供的DB是如何設計的合理近似。
因此,要澄清我想我需要:
選擇的是還沒有發行的所有的有形物品的所有OrderIDs。
非有形物品是IsDownloadable = 1
必須考慮到ShoppingCart.Quantity柱。如果我們訂購4件T恤,我們可以將它們放在一個箱子中(帶有一個UPS追蹤標籤)。然後再一次,我們可以把每盒2個。或者我們可以將一件帶有一件襯衫的牛仔褲放在同一個盒子裏(再次,帶有一個跟蹤標籤)等等。
我一直在編寫無盡的JOIN和嵌套的WHERE NOT IN(SELECT * FROM)無效的垃圾。可悲的是,我似乎無法將我的頭圍繞它......我仍在等待我的靈感時刻。
我是比較新的SQL和數據庫設計,所以任何信息或(建設性)的批評將不勝感激。如果您認爲這會有所幫助,請隨意在數據庫本身的設計中打洞。 :-)
// I wish I could run this on my brain right now...
// (Neurons, apparently, are "excitable")
UPDATE Brain SET Neuron = 'Excited' WHERE Cortex = 'SQL'
UPDATE
這裏是我想出了感謝伯努瓦Vidis。這是我在真實表格/數據上使用的實際查詢:
SELECT
d.OrderID
FROM
Person.ShoppingCart c
JOIN
Inventory.Item i
ON
i.ItemID = c.ItemID
JOIN
Orders.Details d
ON
d.ShopID = c.ShopID
LEFT JOIN
Orders.Shipping s
ON
d.OrderID = s.OrderID
LEFT JOIN
Orders.ShippedItems si
ON
s.ShippingID = si.ShippingID
WHERE
i.DownloadableMedia = 0 AND
d.Billed = 1 AND
d.Ordered = 1
GROUP BY
d.OrderID
HAVING
SUM(c.Quantity) > CASE WHEN SUM(si.Quantity) IS NULL THEN 0 ELSE SUM(si.Quantity) END
哇。我是否認爲ItemID實際上是一個ProductID,並且該LabelID是一個TrackingID?甚至可能會有更多的同義詞,但我無法弄清楚,因爲有這麼多的可能性。如果我是對的,我認爲你想盡快解決這個問題,因爲即使它現在不會讓你感到困惑,它會在以後。它肯定會讓我們對所有人(以及將維護你的代碼的人)感到困惑。 [如何更新問題以使用一致的命名?] – 2010-02-16 17:24:39
Yikes,對不起。我的實際表格沒有像這樣飛行的同義詞。現在它是固定的。 +1指出。 – 2010-02-16 17:35:44