2015-02-11 63 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个收藏