@ Rozwiązanie Jeremy Gustie powyżej prawie działa, ale zrobi coś złego, jeśli liczby porządkowe są wyłączone (lub zawodzą, jeśli ponownie zamówione porządki sprawiają, że niezgodne typy pasują do siebie). Spróbować:
CREATE TABLE test1 (one varchar, two varchar, three varchar);
CREATE TABLE test2 (three varchar, two varchar, one varchar);
INSERT INTO test1 (one, two, three) VALUES ('one', 'two', 'three');
INSERT INTO test2 SELECT * FROM test1;
SELECT * FROM test2;
Wyniki pokazują problem:
testdb=> select * from test2;
three | two | one
-------+-----+-------
one | two | three
(1 row)
Można temu zaradzić poprzez podanie nazwy kolumn we wkładce:
INSERT INTO test2 (one, two, three) SELECT * FROM test1;
który daje ci to, czego naprawdę chcesz:
testdb=> select * from test2;
three | two | one
-------+-----+-----
three | two | one
(1 row)
Problem pojawia się, gdy masz spuściznę, która tego nie robi, jak wskazałem powyżej w moim komentarzu do odpowiedzi peufeu.
Aktualizacja: Przyszło mi do głowy, że można zrobić to samo z nazwami kolumn w klauzuli INSERT poprzez podanie nazwy kolumn w klauzuli SELECT. Po prostu trzeba uporządkować je dopasować porządkowych w tabeli docelowej:
INSERT INTO test2 SELECT three, two, one FROM test1;
I można oczywiście wykonać obie są bardzo wyraźne:
INSERT INTO test2 (one, two, three) SELECT one, two, three FROM test1;
To daje takie same wyniki jak wyżej, z prawidłowo dopasowanymi wartościami kolumn.
Kolejność kolumn jest całkowicie nieistotna w relacyjnych bazach danych - to tylko kwestia ich wyświetlenia w narzędziu. Tabela bazy danych nie ma żadnego uporządkowania kolumn. –