【发布时间】:2011-01-05 05:50:13
【问题描述】:
我正在尝试交叉连接两个表,即客户和项目,这样我就可以按客户逐项创建销售报告。我有 2000 个客户和 2000 个项目。
SELECT customer_name FROM customers; --Takes 100ms
SELECT item_number FROM items; --Takes 50ms
SELECT customer_name, item_number FROM customers CROSS JOIN items; Takes 200000ms
我知道这是 400 万行,但是否有可能让它运行得更快?我想最终加入这样的销售表:
SELECT customer_name, item_number, sales_total FROM customers CROSS JOIN items LEFT JOIN sales ON (customer.customer_name = sales.customer_name, item.item_number=sales.item_number);
sales 表显然不会包含所有客户或所有商品,因此这里的目标是生成一份报告,显示所有客户和所有商品以及已售出和未售出的商品。
我使用的是 PostgreSQL 8.4
【问题讨论】:
-
您是否实际上希望显示所有客户/项目的所有组合,即使他们没有,我的意思是给定的客户可能只有 1 个项目,然后您可能会显示 1999 年不需要的项目?
-
实际上,我这样做是因为我想看看那个客户没有订购什么,所以我可以尝试卖给他们。
-
我实际上有同样的问题,而不是客户和项目,我有资产,其价格以美元和美元在单独的表 2000 x 80 中转换为其他货币,我正在尝试交叉除了我还想将这个交叉连接的结果与另一个表进行内部连接之外,有没有办法指定交叉连接中的计算列应该是主键还是唯一的?
标签: postgresql cross-join