2012-02-23 19 views
37

MySQL Birden çok satır döndüren SELECT alt sorgusu olan bir tabloya nasıl girersiniz?MySQL Birden çok satır döndüren SELECT alt sorgusu olan bir tabloya nasıl girersiniz?

INSERT INTO Results 
    (
    People, 
    names, 
    ) 
    VALUES 
    (
    (
     SELECT d.id 
     FROM Names f 
     JOIN People d ON d.id = f.id 
    ), 

    (
     "Henry" 
    ), 
    ); 

bu alt sorgu dönen bütün sonuçları ile yeni tablo doldurmak için İSTİYORUM . Ben HATA 1242 (21000) almadan bunu nasıl: Alt sorgu 1'den fazla satır

+1

Eklenecek tüm öğeler için bir döngü kullanarak bir prosedürle kullanabilirsiniz. –

+0

Ben bir MySQL newb'im, bir sonuç üzerinde nasıl yineliyorsunuz? – stackoverflow

+0

http://dev.mysql.com/doc/refman/5.1/en/insert-select.html – Michas

cevap

88
INSERT INTO Results (People, names) 
    SELECT d.id, 'Henry' 
    FROM Names f 
    JOIN People d ON d.id = f.id 

sizin SELECT sorgu ile statik dize Henry birleştirin döndürür.

+0

Birden çok isimde varsa ne olur? Sadece "Henry" ve onların üzerinde _iterate_'a ihtiyacım var. –

6
INSERT INTO Results 
    (
    People, 
    names, 
    ) 
    SELECT d.id, 'Henry' 
    FROM Names f 
    JOIN People d ON d.id = f.id 
+0

Doest çalışması http://decoding.wordpress.com/2008/10/11/sql-server-insert-into-with-subquery/ – stackoverflow

+0

Düzenlediğim gönderi – triclosan

8
INSERT INTO Results 
    (
    People, 
    names, 
    ) 
    VALUES 
    (
    (
     SELECT d.id 
     FROM Names f 
     JOIN People d ON (d.id = f.id) limit 1 
    ), 

    (
     "Henry" 
    ), 
    ); 
+8

Taşma Yığına Hoş Geldiniz! Sadece bir kod bloğu göndermek yerine, lütfen * açıkla * bu kodun neden problemi çözdüğünü açıklayın. Bir açıklama olmadan, bu bir cevap değil. –

+1

Bu soruya gerçekten cevap vermiyor. "[...] yeni tabloyu ** bu alt sorgudan dönen ** tüm sonuçlar ** ile doldurdu" ve bu alt sorgu sonuçlarını bir sırayla sınırlıyor. (Bu cevabın 4 yaşından büyük olduğunu biliyorum ama yine de bunu anlatayım.) – MJV

5

İşte iyi çalıştığını bulduğum şey. Biraz uzun ama çoğu zaman fazladan verilerin karıştırılması gerekiyor.

Tablo1'den tablo1'e birden çok satırı değerlerle ekleyin. ÖRNEKLER:

INSERT INTO table1 (col1, col2, col3, col4, col5) 
SELECT "Value", col2, col3, "1900-01-01","9999-12-31" 
FROM table2 t2 
WHERE t2.val2 IN (MULTIPLE VALUES) 
AND (Another Conditional); 

Not olduğunu:

INSERT INTO table1 (col1, col2, col3, col4, col5) 
SELECT col1,col2,col3,col4,col5 
FROM table2 t2 
WHERE t2.val2 IN (MULTIPLE VALUES) 
AND (Another Conditional); 

Sert tekrar verilerle birden fazla satır eklemek için değerleri kodlu insert edebilirsiniz "Değer", "1900-01-01", "9999- 12-31 "eklenen tüm satırlarda tekrarlanacak.

-1

ec_element içine ekleyin (parentid, name) elementid, ec_element öğesinden 'STARTUP', burada name = 'BG';

insert ifadesi, koşulun yerine getirildiği ve bir etiket dizgisiyle bulunan tablodaki değerleri alır.

İlgili konular