2013-07-18 17 views
1

關於MySQL的問題,我怎樣才能得到屬於另一個表項的所有組合的表項?屬於條目的組合在另一張表中選擇表項(MySQL的)

背景:我想算其中包括訂單項目的訂單。每個訂單商品都具有「取消」或「已交付」狀態。有部分交貨,因此可以一次交付和取消訂單。我想算的淨訂單,我想知道有多少的訂單有多個項目狀態的項目。

Order Number | Order Item | Status 

X0001  | Item  | delivered 
X0001  | Item  | delivered 
X0002  | Item  | delivered 
X0002  | Item  | canceled 
X0002  | Item  | delivered 
X0003  | Item  | delivered 

我在這裏有3個有效的訂單和一個訂單交付/取消。我如何要求所有至少有一個送達和一個取消項目的訂單?

由於我對MySQL非常陌生,我基本上在尋找正確的方法。我需要子查詢或關節嗎?

編輯:首先,很抱歉這麼晚纔回復。再次抱歉,因爲我的問題顯然是誤導性的。

涉及三個表格:'order','order_item'和'order_item_status'。

'order'和'order_item'通過'order_item.fk_order'和'order.id_order'鏈接。

'order_item'和'order_item_status'通過'order_item.fk_order_item_status'和'order_item_status.id_order_item_status'鏈接。

到目前爲止,你一直非常有幫助,但我仍然有點卡住,因爲我不知道如何最終通過組合計數。 完美的結果將是類似的東西:

{shipped}   | 34 
{canceled}   | 12 
{shipped, canceled} | 8 
{closed, canceled} | 4 
{closed}    | 27 
...     | ... 

但我不知道如何處理與查詢的組合。也許你有一些更有益的提示我...

非常感謝你。

+0

給定數據的結果是什麼? – hjpotter92

+0

WHERE IN(x,y)GROUP BY b HAVING COUNT(*)= no。 IN子句中的項目 – Strawberry

回答

0

我假設你有兩個表: 訂單(訂單列表) ORDER_ITEMS 兩條表(的次序itemd列表)通過現場fk_order的relationed。

試試這個:

SELECT o.id, (select count(*) from order_items i where i.status = 'delivered' and i.fk_order = o.id) as item_delivered, (select count(distinct i.status) from order_items i where i.fk_order = o.id) as status_no 
FROM orders o 
0

我假設你的數據都在一個表像你描述。然後,您可以通過訂單號要組數據,然後只得到與兩個訂單取消和交付? 請求也應該是這樣的:

select * from table \ 
group by Order Number \ 
Having State="canceled" and State="delivered" 
0

通過上表連接你可以選擇不同的值排在同一個表。然後計算不同的訂單號碼。

SELECT COUNT(DISTINCT orig.Number) 
FROM order_items AS orig 
INNER JOIN order_items AS diff ON diff.Number = orig.Number AND diff.Status != orig.Status

這比使用子查詢更快。

編輯:忘了提及它是一個更具可擴展性的實現,以及您可以添加更多的訂單狀態,而不會失敗。

0

我不明白你爲什麼在談論「另一個表中的條目組合」? 根據您的問題的以下情況,您有一個具有 - 至少-3個屬性的單個表:訂單號,訂單項,狀態。這是正確的還是其他表中的某些屬性,在這種情況下,您可以詳細說明一下嗎?

否則我會嘗試使用子請求,做一些事情,如:。

SELECT T1 * FROM表WHERE T1 = T1.status取消,T1.order_number IN(SELECT T2.order_number從表t,其中T2 .status =交付)

相關問題