我有一个表,想从每一列中获取不同的值。
select distinct 'customer', customer from sales
union
select distinct 'product',product from sales
在示例中,MySQL 对(巨大的)表进行了两次完整传递。
我试图从许多列中获取不同的值,所以实际上查询会执行 6 次完整的表传递。在这种情况下,索引不是一种选择。
我怎样才能说服 MySQL 一次性做到这一点?
我有一个表,想从每一列中获取不同的值。
select distinct 'customer', customer from sales
union
select distinct 'product',product from sales
在示例中,MySQL 对(巨大的)表进行了两次完整传递。
我试图从许多列中获取不同的值,所以实际上查询会执行 6 次完整的表传递。在这种情况下,索引不是一种选择。
我怎样才能说服 MySQL 一次性做到这一点?
您可以尝试非透视方法
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演示