2013-03-27 22 views
9

158 sütun ve 22.000 satır içeren bir tablom var ve değerlerin kullanıcı tarafından gelen WHERE koşuluna göre dinamik olarak eklenmesini istediğim boş bir tablom var. suic_att> = 5 VE cinsiyet = 'M'Satırları INSERT sorgusu kullanarak bir tablodan diğerine kopyala

Bu (diyelim) tekrar bana yaklaşık 9.000 kayıtları verir NEREDE

SELECT * mygrist_tables GELEN: SELECT sorgusu bu gibi bir şey olacaktır. Bu kayıtları başka bir tabloya eklemek istiyorum (sadece bu filtrelenmiş veri). Mümkün mü? Herkes bana INSERT sorgusunun nasıl görüneceğini ve tüm 158 cloumns ile başka bir tablo oluşturmam gerekip gerekmediğini veya INSERT sorgusunun tüm bu 158 sütunları dinamik olarak oluşturabilmesini sağlayabilir mi? Ayrıca, bunu bir görüş kullanarak yapabilir miyim veya bir tablo gerekli olabilir mi? Şimdiden teşekkürler!

+0

INSERT INTO ... SEÇ ... –

+0

sen gibi bana bir sorgu verebilir misiniz kullanırdınız? –

+2

Hayır, bence bunu halledebilirsin. –

cevap

20

Yukarıdaki SELECT bildirimini ve INSERT sonuçları çalıştırmak istediğiniz gibi olmayan yeni bir tabloya benziyor. Eğer öyleyse, bu çalışması gerekir: bunlar aynı değildir yılında İsteğe bağlı sütunları belirtmek gerekebilir

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

:

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

sonra INSERT INTO çalıştırmak gerekirdi YourNewTable zaten vardı varsayarsak .

DÜZENLEME - yorumlarınızı yeniden okunması ve SQL deyimi yeni bir tablo oluşturmak için, DB MySQL olduğunu anlayarak, kullanmak gerekir:

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

Aslında, yeni tabloda yalnızca bir P_ID sütunu var ve eski tabloda bulunmuyor. Bu sorguyu nasıl güncelleyebilirim? Sorguyu çalıştırmayı denediğimde bu hatayı aldığımdan: Hata Kodu: 1136. Sütun sayısı, satırdaki değer sayısıyla eşleşmiyor –

+0

@SharadhaJayaraman - INSERT INSERT INSERT INTOAT (Col1, Col2, vb.) SELECT Col1, Col2, vb FROM ... - Bu durumda sütun isimlerini belirtmelisiniz maalesef ... İyi şanslar. – sgeddes

+0

Tüm 158 sütunları? :( –

3

Sen SEÇ INTO kullanabilirsiniz sözdizimi

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

Ama yapamazsınız zaten böyle bir tabloya yerleştirin. masanız zaten varsa, sen

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

Tüm 158 sütunları [TÜM SAYFALARINIZIN BURADA LİSTESİNİ BURAYIN] içinde nasıl kodlayabilirim? Bunu yapmanın daha iyi bir yolu yok mu? –

+0

Demek istediğim, Sgeddes'in cevabında bahsettiği şeydi ... Seçtiğiniz tablo, eklediğiniz tablodan farklıysa, sütunları listelemeniz gerekirdi. Eğer aynı ise, * – rbedger

+0

kullanabilirsiniz. Bu gerçekten berbat. Ben 50 farklı sütun isimleri elle yazarak MySQL bir aptal beklentisi gibi görünüyor benzer bir durumdayım. Sanırım Percona'nın alter aracı, bu dünyada bir anlam ifade eden tek şey. – skrilled

İlgili konular