Как найти первый столбец и первую строку в таблице с помощью SQL - PullRequest
2 голосов
/ 12 мая 2009

Мне задали этот вопрос, и я не смог придумать ответ.

Есть ли способ найти запись в первой строке и первом столбце таблицы?

(в матричной записи это будет местоположение [1,1]th)

Ответы [ 6 ]

7 голосов
/ 12 мая 2009

В двух словах: реляционная таблица не является матрицей.

В реляционном мире 1'st row имеет смысл только тогда, когда вы определяете некоторый порядок в вашем наборе данных. Нет такой вещи как «неявно первая запись».

Если вы упорядочите строки по значениям первого столбца, это так:

SELECT  column1
FROM    table
ORDER BY
        column1
LIMIT 1

Также обратите внимание, что разные столбцы в таблице принадлежат разным domains.

Смысл наличия таблицы в том, чтобы определить некоторые relation между этими domains, поэтому все это называется «реляционной базой данных», а сами таблицы иногда называют «отношениями».

Порядок столбцов также не имеет особого значения в реляционной таблице.

Предполагается, что вы всегда ссылаетесь на столбец по имени.

Если замена порядка столбца влияет на результат вашего запроса, это считается плохим дизайном.

Есть такие вещи, как SELECT * и ORDER BY 1, но их, как правило, следует избегать.

3 голосов
/ 13 мая 2009

Было много хороших отзывов, касающихся первой части вопроса. Но что касается «первого столбца», вы можете попробовать один из следующих вариантов:

  1. Вы можете использовать словарь данных базы данных, чтобы получить первый столбец таблицы. В Oracle, например, запрос будет:

    select column_name  
    from   user_tab_columns 
    where  table_name='YOUR_TABLE_NAME' 
    and    column_id=1
    
  2. Если вы используете JDBC или какой-либо другой API доступа к базе данных, большая часть этих APIS позволит вам сделать "select *", и тогда вы сможете получить первый столбец, получив доступ к нулевому (или первому) элементу вашего набора результатов.

1 голос
/ 12 мая 2009

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

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

1 голос
/ 12 мая 2009

Концептуально таблицы SQL неупорядочены. Вам нужно указать столбцы для упорядочения, чтобы идея «первой строки» имела смысл.

Это легко, если ваша СУБД поддерживает LIMIT.

SELECT * FROM table ORDER BY column LIMIT 1

В противном случае вы можете использовать TOP, но если ваш порядок по столбцу содержит повторяющиеся значения для верхнего элемента, вы можете получить больше строк, чем запрашиваете (в зависимости от вашей СУБД в MS-SQL это не будет сделано, если Вы указываете С галстуками).

SELECT TOP 1 * FROM Table ORDER BY column
0 голосов
/ 12 мая 2009

Если вы пытаетесь найти первую запись, введенную в таблицу, то вам нужно установить поле DateEntered во время создания таблицы, тогда вы можете найти первую запись, выполнив поиск по самой ранней дате. Заказ в поле идентификатора, если он у вас есть, является способом получения более ранних записей, но вы не можете гарантировать, что транзакция, которая создала ID 1, действительно была вставлена ​​в таблицу раньше, чем транзакция, которая генерировала ID 2. Вы знаете только эту транзакцию начал первым, а не закончил первым. Использование поля даты - единственный способ убедиться в этом. За эти годы я научился проектировать для этих вещей, вы не можете запросить информацию позже, что вы не сохранили в первую очередь.

0 голосов
/ 12 мая 2009
Select top 1 Column1
From MyTable
Order by Column1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...