koolprasadd Ответов: 1

При каждом выполнении innerjoin возвращает результат в случайном порядке


Уважаемая команда
Я столкнулся с проблемой wired, где при каждом выполнении InnerJoin возвращает результат в случайном порядке.
Это произошло также В SQL 2008R2 и 2012 годах.

Оба внутренних столбца соединения имеют (одинаковый) тип данных NUMERIC (18,0)

какая может быть возможная причина ?
вот мой пример запроса

SELECT info.col1, 
info.col2, info.col3, info.col4
FROM table1 AS info INNER JOIN tavle2 AS pln ON  pln.col2 =info.col6 WHERE info.col6 = 'I00262'


Что я уже пробовал:

1. у меня есть типы данных проверки обоих столбцов (которые одинаковы)

1 Ответов

Рейтинг:
0

Dave Kreskowiak

Вы сделали предположение, что таблицы базы данных имеют порядок для начала. А они-нет. Записи из таблицы могут быть возвращены в любом порядке в любое время. Это сводится к тому, откуда взялись данные в SQL-сервере. Это означает, что вы приходите прямо с диска, со страниц кэша, на которые влияют некоторые другие операции, происходящие у вас. Они могут быть записаны в базу данных в произвольном порядке. В игре есть много факторов.

У меня есть код, который записывает много данных в таблицу для целей отладки. Все записи записываются в определенном порядке, когда код записывает их (отметка времени), но когда вы позже запрашиваете базу данных, вы обнаруживаете, что все записи перемешаны.

Единственный случай, когда записи гарантированно имеют какой-либо порядок вообще, - это когда вы добавляете предложение ORDERBY в свой запрос SELECT. Кроме того, предположим, что они вышли из строя.


koolprasadd

Спасибо за уточнение, Дэйв.
Теперь, если те же файлы базы данных (MDF/LDF) У меня есть де-прикрепление и повторное прикрепление на другом сервере, я не наблюдал никакого вывода случайного порядка
при каждом выполнении он извлекает данные в одном и том же порядке.
вышеприведенный сценарий снова заставил меня задуматься.

Dave Kreskowiak

И это нисколько не меняет моего ответа.

В конце концов, вам вообще не гарантируется никакой порядок, если вы не поставите в запрос предложение ORDER BY.

koolprasadd

Теперь все ясно. Спасибо.