0

単一のテーブルがあり、各列から個別の値を取得したいと考えています。

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

この例では、MySQL は (巨大な) テーブルの 2 つの完全なパスを実行します。

多くの列から個別の値を取得しようとしているため、実際には、クエリはテーブルの 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 に答える