sql >> Databáze >  >> RDS >> Sqlserver

Jak uspořádat řádky tabulky ve vzestupném pořadí a současně uložit tabulku?

Řádky v tabulce jsou neuspořádané, takže nemá smysl mluvit o tom, že řádky jsou v pořádku. A sada výsledků z dotazu je neuspořádaná, pokud nepoužijete order by doložka.

To znamená, že můžete mít stejný účinek umístění řádků do tabulky uspořádaným způsobem. Zde je metoda.

select top 0 *
into new_table
from existing_table;

alter table new_table add new_table_id int identity(1, 1);

insert into new_table(<list of columns without new_table_id>)
    SELECT <list of columns without new_table_id>
    INTO new_table
    FROM existing_table
    ORDER BY col1, col2;

Sloupec id je zaručen ve správném pořadí. V praxi to vypadá, že řádky budou vkládány v pořadí. Přísně vzato, pořadí vložení není zaručeno, ačkoli hodnoty id jsou seřazeny správně.

Jak je uvedeno v komentáři, můžete také:

alter table new_table add new_table_id int identity(1, 1) not null primary key;

Můžete to udělat, protože tabulka je prázdná. Jako primární klíč by měla být data vložena v pořadí.

Ale jako poznámku. Dotaz:

select *
from new_table;

nezaručuje pořadí výsledků. Nezáleží na tom, jaké je pořadí vložení do tabulky. Nemůžete se spoléhat na to, že výsledky budou v určitém pořadí jen proto, že řádky byly uspořádány tímto způsobem. Například v prostředí s více vlákny výsledky obecně nebudou být v pořádku, ať už teoreticky nebo prakticky.



  1. Jak vyřešit Metoda org.postgresql.jdbc.PgConnection.createBlob() ještě není implementována

  2. jak spočítat celkový komentář

  3. dynamické předávání názvu tabulky a sloupce pomocí vazebných proměnných

  4. Vyberte COUNT ve dvou tabulkách v jednom dotazu s MYSQL