2013-03-27 15 views
9

Mam tabelę z 158 kolumnami i 22 000 wierszy i mam kolejną pustą tabelę, w której chcę dynamicznie wstawiać wartości na podstawie warunku WHERE pochodzącego od użytkownika. Zapytanie SELECT będzie wyglądać następująco:Kopiowanie wierszy z jednej tabeli na drugą przy użyciu zapytania INSERT

select * from mygrist_tables GDZIE suic_att> = 5 i gender = 'M'

To daje mi około 9000 rekordy z powrotem (powiedzmy). Chcę wstawić te rekordy do innej tabeli (tylko te filtrowane dane). Czy to możliwe? Czy ktokolwiek mógłby mi dać wyobrażenie o tym, jak wyglądałoby zapytanie INSERT i czy potrzebuję utworzyć kolejną tabelę ze wszystkimi tymi 158 cloumns, czy też zapytanie INSERT dynamicznie utworzyło wszystkie te 158 kolumn? Czy mógłbym to zrobić za pomocą widoku, czy stół byłby niezbędny? Z góry dziękuję!

+0

INSERT INTO ... SELECT ... –

+0

Czy możesz dać mi jako takie zapytanie proszę? –

+2

Nie, myślę, że mógłbyś to załatwić. –

Odpowiedz

20

Wygląda na to, że chcesz uruchomić powyższe oświadczenie SELECT i INSERT wyników w nowej tabeli, która nie istnieje. Jeśli tak, to powinno działać:

SELECT * INTO YourNewTable 
FROM mygrist_tables 
WHERE suic_att>=5 AND gender='M' 

Zakładając YourNewTable już istniał, to by trzeba uruchomić INSERT INTO:

INSERT INTO YourNewTable 
SELECT * 
FROM mygrist_tables 
WHERE suic_att>=5 AND gender='M' 

Opcjonalnie może trzeba określić kolumn nie są takie same .

EDIT - Rereading komentarzy i realizacji DB MySQL, aby utworzyć nową tabelę z instrukcji SQL, należy użyć:

CREATE TABLE YourNewTable 
SELECT * 
FROM mygrist_tables 
WHERE suic_att>=5 AND gender='M'; 

http://dev.mysql.com/doc/refman/5.0/en/create-table.html

+0

Właściwie, mam tylko kolumnę P_ID w nowej tabeli i nie ma jej w starej tabeli. Jak mogę zaktualizować to zapytanie? Ponieważ pojawia się ten błąd podczas próby uruchomienia zapytania: Kod błędu: 1136. Liczba kolumn nie pasuje do liczby wartości w wierszu 1 –

+0

@SharadhaJayaraman - INSERT INTO YourNewTable (Col1, Col2, itp.) WYBIERZ Col1, Col2, itp. OD ... - Musisz podać nazwy kolumn w tym przypadku niestety ... Powodzenia. – sgeddes

+0

Wszystkie kolumny 158? :( –

3

Można użyć SELECT INTO składnia

SELECT * 
INTO MyNewTable 
FROM mygrist_tables WHERE suic_att>=5 AND gender='M' 

Ale nie będziesz w stanie wstaw do tabeli, która już istnieje. Jeśli tabela już istnieje, należy użyć

INSERT INTO MyOldTable 
([LIST OUT YOUR COLUMNS HERE]) 
SELECT [LIST OUT YOUR COLUMNS HERE] 
FROM mygrist_tables WHERE suic_att>=5 AND gender='M' 
+1

Jak mogę zakodować wszystkie 158 kolumn w [LIST OUT YOUR COLUMNS HERE]? Czy nie ma lepszego sposobu na zrobienie tego? –

+0

Co miałem na myśli to, co @sgeddes wspomniał w swojej odpowiedzi ... Trzeba by wymienić kolumny, jeśli wybierany przez ciebie stół różni się od stołu, w który wkładasz. Jeśli są takie same, możesz użyć * – rbedger

+0

To naprawdę jest do bani. Jestem w podobnej sytuacji, w której ręczne wpisywanie 50 różnych nazw kolumn wydaje się głupim oczekiwaniem na MySQL. Domyślam się, że narzędzie alter percona jest jedyną rzeczą, która ma sens na tym świecie. – skrilled

Powiązane problemy