Порядок улья по невидимой колонке - PullRequest
0 голосов
/ 05 февраля 2019

Допустим, у меня есть таблица test со столбцом a,b и c и test2 с тем же столбцом.Можно ли создать представление таблицы test и test 2, объединенные вместе и упорядоченные по полю c из таблицы test, не показывая его в конечном выводе?В моем случае:

CREATE VIEW AS test_view AS
SELECT a,b FROM (SELECT * FROM test ORDER BY c)
JOIN test2 ON test.a =test2.a;

Хорошо, я проверяю это, и это невозможно, потому что тасуется фаза, так что, возможно, есть другое решение, чтобы как-то это сделать?Таблица слишком велика для трансляции.

Конечно, я могу сделать

CREATE VIEW AS test_view AS
SELECT a,b,c FROM test
JOIN test2 ON test.a =test2.a
ORDER BY c

, а затем

CREATE VIEW AS final_view AS
SELECT a,b FROM test_view;

Но это решение очень не оптимально

Есть идеи?

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019

Это то, на что вы смотрите?

CREATE VIEW AS test_view AS
SELECT a,b FROM 
(SELECT * FROM 
test t1 JOIN test2 t2
ON test.a =test2.a
ORDER BY t1.c
) abc;
0 голосов
/ 08 февраля 2019

Я получаю

CREATE VIEW AS test_view AS
SELECT a,b,c FROM test
JOIN test2 ON test.a =test2.a
ORDER BY c

, а затем

CREATE VIEW AS final_view AS
SELECT a,b FROM test_view;

Это может быть неоптимально, но это единственный гарантированный способ получить все в порядке и в моем случае (около 4-5 включений) гораздо проще получить с первого взгляда.Конечно, мы можем также создать test_view как временное представление, но это просто полировка.

Но, возможно, у некоторых из вас есть какое-то другое рабочее решение - не стесняйтесь опубликовать его :)

0 голосов
/ 05 февраля 2019

Рассмотрим то же самое, что и таблица на верхнем уровне. Выбор из нее возвращает не упорядоченный набор данных, только order by (или распространять + сортировать) в верхнем порядке запросов гарантирует.Если вы материализуете это представление как отсортированную таблицу, результат выбора из нее не будет гарантированно отсортирован , поскольку таблица читается параллельно, а строки возвращаются не в «исходном порядке». Классическая теория утверждает, что упорядоченные таблицы являются нарушением 1-й НФ.Упорядоченное представление не может быть создано в базе данных, соответствующей SQL: 2003.

Упорядочивать внутри представления не имеет смысла.Следовательно, порядок по невидимому столбцу в представлении также не имеет смысла. Вместо этого используйте ORDER BY в верхнем запросе. Только order by (или распространение + сортировка) в верхнем запросе гарантирует порядок.

...