我有以下情形:MSSQL查詢優化
1客戶端有2名產品列表(一個共同的,一個私人的),這些名單有很多產品,有些產品可以出現在兩個列表。如果產品出現在私人列表中,我希望得到它,否則我將採用通用列表中的那個。
什麼是你認爲實現這一目標的最快的方法?到目前爲止,我已經試過如下:
- 聯盟PHP ALL然後刪除重複(平庸的表演)
- UNION(表現欠佳)
是否有其他方法可以實現?
編輯
下面是一個小提琴證明我有什麼http://sqlfiddle.com/#!6/41d2e/2
在撥弄我假設列表ID 7和1,因爲它們是列表ID爲客戶1,我用沒有加入作爲我已經從php中檢索到了這個Id。
我需要的是是否存在從私人列表檢索產品,否則公共
作爲多一個MySQL的傢伙,我通常會用一組,做這個由無骨料,所以用正確的順序taht由MySQL會簡單地削減不需要的記錄(糟糕的做法,但固體和足夠高性能):
select *
from pricelist
where listId in (1, 7)
order by listId asc
group by artnum
因此,舉例來說,如果我想獲得的所有產品,爲客戶ID 1,我需要找回放入系統:
ID ARTNUM ARTDES LISTID PRICE
1 1000 potatoes 1 20
1 1001 carrots 7 4
由於客戶端1有2個列表:1和7(土豆出現在列表1和7中,所以我只想在客戶私人列表中的土豆,而不是公共列表)
希望我清楚了,對不起,所有放入系統編輯
您能否提供一些示例數據和預期輸出?同時請發佈你的嘗試。 – 2015-02-11 07:23:59
我添加了一個擺弄什麼,我需要 – kitensei 2015-02-11 07:41:41
你能發表您的預期輸出示範? – 2015-02-11 07:58:56