Сортировать по Inner Join - PullRequest
17 голосов
/ 01 ноября 2010

Я помещаю внутреннее объединение в свой запрос. Я получил результат, но не знал, как данные поступают в вывод. Может кто-нибудь сказать мне, как внутреннее объединение соответствует данным. Ниже я показываю изображение . Есть две таблицы (одна или две таблицы).

alt text

По моему мнению, в первом ряду это должен быть Mohit, но вывод другой. Пожалуйста, скажите мне.

Заранее спасибо.

Ответы [ 6 ]

11 голосов
/ 01 ноября 2010

В SQL порядок вывода не определен, если вы не укажете его в предложении ORDER BY.

Попробуйте:

SELECT  *
FROM    one
JOIN    two
ON      one.one_name = two.one_name
ORDER BY
        one.id
5 голосов
/ 01 ноября 2010

Избегайте SELECT * в вашем основном запросе.

Избегайте дублирования столбцов: условие JOIN гарантирует равенство One.One_Name и two.One_Name, поэтому вам не нужно возвращать оба в предложении SELECT.

Избегайте дублированияимена столбцов: переименуйте One.ID и Two.ID, используя «псевдонимы».

Добавьте предложение ORDER BY, используя имена столбцов («alises», где это применимо) из предложения SELECT.

Рекомендуется переписать:

SELECT T1.ID AS One_ID, T1.One_Name, 
       T2.ID AS Two_ID, T2.Two_name
  FROM One AS T1
       INNER JOIN two AS T2
          ON T1.One_Name = T2.One_Name
 ORDER 
    BY One_ID;
5 голосов
/ 01 ноября 2010

Вы должны отсортировать его, если хотите, чтобы данные возвращались определенным образом. Когда вы говорите, что ожидаете, что «Mohit» будет первой строкой, я предполагаю, что вы говорите это, потому что «Mohit» является первой строкой в ​​таблице [One]. Однако когда SQL Server объединяет таблицы, он не обязательно объединяется в том порядке, в каком вы думаете.

Если вы хотите, чтобы была возвращена первая строка из [One], попробуйте выполнить сортировку по [One].[ID]. Кроме того, вы можете order by любой другой столбец.

3 голосов
/ 01 ноября 2010

Добавьте ORDER BY ONE.ID ASC в конце вашего первого запроса.

По умолчанию порядок отсутствует.

1 голос
/ 01 ноября 2010

SQL не возвращает порядок по умолчанию, потому что так быстрее. Не нужно сначала просматривать ваши данные, а затем решать, что делать.

Вам необходимо добавить порядок по пунктам и, возможно, порядок, по которому вы ожидаете идентификатора. (Есть дубликат имен, поэтому я предполагаю, что вы хотите One.ID)

select * From one
inner join two
ON one.one_name = two.one_name
ORDER BY one.ID
0 голосов
/ 07 августа 2018

Я обнаружил, что это проблема при присоединении, но этот блог может оказаться полезным для понимания того, как объединения работают в спине. Как работает Joins ..

[Изменено] @Shree Спасибо за указание на это. По пункту Merge Join. Упоминается, как работают объединения ...

Как хэш-соединение, объединение объединения состоит из двух этапов. Во-первых, обе таблицы объединения сортируются по атрибуту соединения. Это можно сделать всего двумя проходит через каждую таблицу с помощью внешней сортировки слиянием. Наконец, кортежи результата генерируются при извлечении следующего упорядоченного элемента из каждая таблица и атрибуты соединения сравниваются

.

...