我有一个表,希望从每一列中获取不同的值。
select distinct 'customer', customer from sales
union
select distinct 'product',product from sales
在示例中,MySQL 对(巨大)表进行了两次完整传递。
我试图从许多列中获取不同的值,因此实际上查询将对表执行 6 次完整传递。在这种情况下,索引不是一个选项。
如何说服 MySQL 一次完成此操作?
最佳答案
您可以尝试 unpivot 方法
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 演示
关于mysql - 优化mysql中的多 channel 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19355373/