我有一个表,希望从每列中获取不同的值。
select distinct 'customer', customer from sales
union
select distinct 'product',product from sales
在该示例中,MySQL执行(巨大)表的两次完整传递。
我正在尝试从许多列中获取不同的值,因此实际上查询将执行表的6次完整传递。在这种情况下,索引不是一种选择。
如何说服MySQL一次性完成这项工作?
答案 0 :(得分:0)
您可以尝试使用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 演示