0

我有一个表,想从每一列中获取不同的值。

select distinct 'customer', customer from sales
union
select distinct 'product',product from sales

在示例中,MySQL 对(巨大的)表进行了两次完整传递。

我试图从许多列中获取不同的值,所以实际上查询会执行 6 次完整的表传递。在这种情况下,索引不是一种选择。

我怎样才能说服 MySQL 一次性做到这一点?

4

1 回答 1

0

您可以尝试非透视方法

SELECT DISTINCT 
       CASE WHEN type = 1 THEN 'customer' 
            WHEN type = 2 THEN 'product' 
       END type,
       CASE WHEN type = 1 THEN customer
            WHEN type = 2 THEN product
       END value
  FROM sales s CROSS JOIN 
(
  SELECT 1 type UNION ALL
  SELECT 2
) t
 ORDER BY type

这是SQLFiddle演示

于 2013-10-14T08:19:21.150 回答