T-SQL:尝试将两个查询合并为一个

时间:2017-09-13 22:37:11

标签: sql-server tsql

我想要一个客户列表以及他们从项目A,B,C,D,E中购买的所有商品

但是......

仅适用于已购买C或E的客户。

现在我正在考虑像这样的PSEUDO-CODE:

Select Customer, Item From Purchases
Where Items In (A, B, C, D, E)
And Customer In 
(
Select Customer From Purchases
Where Items In (C, E)
)

我的实际查询要复杂得多,运行时间很长,并且包含多个表中的客户信息以及分布在多个表中的购买...我想知道两次运行Select语句是否效率低 - 以及我是否可以执行这更有效率?

1 个答案:

答案 0 :(得分:0)

答案取决于数据的复杂性,格式和数量 有时您只需将IN替换为EXISTS 另一种方法是使用temp表 - 填充使用C,E项的客户列表到临时表中,然后在查询中使用临时表

Select Customer, Item From Purchases p1
Where p1.Items In (A, B, C, D, E)
  and exists (
    select top 1 1 from Purchases p2 
      where p1.Customer = p2.Customer
        and p2.Items in (C,E))