Mam jedną tabelę i chcę uzyskać różne wartości z każdej kolumny.
select distinct "customer", customer from sales
union
select distinct "product",product from sales
W tym przykładzie MySQL wykonuje dwa pełne podania (ogromnej) tabeli.
Próbuję uzyskać odrębne wartości z wielu kolumn, więc w rzeczywistości kwerendy wykonałoby 6 pełnych przejść tabeli.Mindeksowanie nie jest w tym przypadku opcja.
Jak mogę przekonać MySQL do zrobienia tego w jednym przebiegu?
Odpowiedzi:
0 dla odpowiedzi № 1Możesz spróbować zastosować metodę niepodzielną
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
Tutaj jest SQLFiddle próbny