2015-02-11 113 views
-1

我有以下情形: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中,所以我只想在客戶私人列表中的土豆,而不是公共列表)

希望我清楚了,對不起,所有放入系統編輯

+1

您能否提供一些示例數據和預期輸出?同時請發佈你的嘗試。 – 2015-02-11 07:23:59

+0

我添加了一個擺弄什麼,我需要 – kitensei 2015-02-11 07:41:41

+0

你能發表您的預期輸出示範? – 2015-02-11 07:58:56

回答

0

,因爲我無法弄清楚如何做到這一點適當的純SQL,我使用了PHP方法:

  • 檢索兩個查詢不UNION/UNION ALL
  • 創建2個PHP收藏
  • 合併刪除重複的2個收藏