2010-05-17 25 views
6

Değerleri, bir tablodaki diğer tablolardaki karşılık gelen değerlere göre güncellemek istiyorum. Adını üreticinin kimliğini içeren Pieces tablosunda Manufacturers tablosunda bulunan belirli bir üretici tarafından sağlanan parçaların fiyatlarını güncellemek istediğinizi varsayalım.Başka bir tablodan bir alana dayalı bir sütunu güncelleştirin

MySQL here ve MS SQL Server here için birkaç çözüm gördüm, ancak bunların hiçbiri SQLite'de çalışmıyor gibi görünüyor.

Herhangi bir öneriniz var mı?

+3

+1: Yetkinlik için. Eğer sadece başkaları aynı soruyu soruları araştırmaya koymuşlarsa ... –

cevap

2

Böyle bir şey denediniz mi?

UPDATE Pieces 
SET price = 42 
WHERE manufacturer_id = (
    SELECT id 
    FROM Manufacturers 
    WHERE Name = 'FooBar Inc.' 
) 
+0

Evet, işe yarıyor! Teşekkürler. Yuvalanmış SELECT'de "ilk (id)" olmamalı mı? – Sergio

+0

@OMG Ponies: SQLite, MySQL değil. Neden 'FooBar Inc.' adında iki şirket olamaz? Teklik kısıtlaması sadece PK (id) için geçerlidir. – Sergio

+2

@Sergio: Bunun için üzgünüz, ancak potansiyel yinelenen verilerle ilgili nokta duruyor. PK kimlik olmalı, isim SQLite tarafından desteklenen benzersiz bir kısıtlamaya sahip olmalıdır. –

0

SQLite için UPDATE ifadelerinde JOIN işlevi yoktur. Sahip olduğunuz tek seçenek corellated alt sorgular hale getirmektir:

UPDATE pieces 
    SET price = (SELECT SUM(price) 
       FROM manufacturers 
       WHERE pieces.manufacture_id = manufacturers.id) 
WHERE manufacture_id in (SELECT id 
         FROM manufacturers 
         WHERE name IN ('boo', 'foo')); 

çok verimli değildir, ama sen ihtiyaçlarınıza ayarlayabilirsiniz.

İlgili konular