我有以下情形: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