2012-04-04 18 views
0

Mein Script-:Wie Zieltabelle für Aktualisierung in FROM-Klausel für MYSQL angeben?

UPDATE catalog_product_price 
SET catalog_product_price.value = 200 
WHERE value_id = (
    SELECT value_id 
    FROM catalog_product_price 
    WHERE `entity_id` = ( 
     SELECT `entity_id` 
     FROM `catalog_product_entity` 
     WHERE `sku` LIKE 'sample' 
     ) 
    AND website_id = 10 
    AND customer_group_id= (
     SELECT customer_group_id 
     FROM customer_group 
     WHERE 
      customer_group_id = catalog_product_price.customer_group_id 
      AND customer_group_code =100 
     ) 
    ) 

Es gibt mir folgende fehler-: # 1093 - Sie nicht Zieltabelle 'catalog_product_price' for update in FROM-Klausel

Kann mir jemand Lösung bieten können angeben für das gleiche wie ich Lösung auf dieser Link- gegeben versucht: http://www.mysqlfaqs.net/mysql-faqs/Errors/1093-You-can-not-specify-target-table-comments-for-update-in-FROM-clause aber nicht in der Lage zu tun ... plz help me ..

Antwort

5

müssen Sie beitreten Tabellen in die UPDATE-Anweisung statt alle diese Subqueries

UPDATE catalog_product_price cpp 

JOIN catalog_product_entity cpe 
    ON cpe.entity_id = cpp.entity_id 
    AND cpe.sku LIKE 'sample' 
    AND website_id = 10 

JOIN customer_group cg 
    ON cg.customer_group_id = cpp.customer_group_id 
    AND cg.customer_group_code = 100 

SET cpp.value = 200 

Note mit: Ihre Syntax ist ziemlich schwierig zu lesen, so kann ich es zu interpretieren einen Fehler gemacht haben. Wie auch immer, das ist die Idee und es sollte dir helfen, zur endgültigen Antwort zu kommen.

3

Speichern Sie die abgefragten Werte in user defined variables:

set @value_id := (
    SELECT value_id 
    FROM catalog_product_price 
    WHERE `entity_id` = ( 
     SELECT `entity_id` 
     FROM `catalog_product_entity` 
     WHERE `sku` LIKE 'sample' 
    ); 
set @customer_group_id := (
    SELECT customer_group_id 
    FROM catalog_product_price 
    WHERE `entity_id` = ( 
     SELECT `entity_id` 
     FROM `catalog_product_entity` 
     WHERE `sku` LIKE 'sample' 
    ); 

UPDATE catalog_product_price 
SET catalog_product_price.value = 200 
WHERE value_id = @value_id 
AND website_id = 10 
AND customer_group_id = @customer_group_id; 

Beachten Sie, dass Ihre zweite innere Abfrage Unsinn ist - Sie Spalte Auswahl customer_group_id, deren Wert ist bereits bekannt, wegen der Klausel where WHERE customer_group_id = catalog_product_price.customer_group_id ... völlig überflüssig