2012-08-01 17 views
97
DELETE B.* 
FROM m_productprice B 
     INNER JOIN m_product C ON B.m_product_id = C.m_product_id 
WHERE C.upc = '7094' AND B.m_pricelist_version_id = '1000020' 

otrzymuję następujący błąd PostgreSQL 8.2.11PostgreSQL usunąć ze sprzężenia wewnętrznego

ERROR: syntax error at or near "B" 
LINE 1: DELETE B.* from m_productprice B INNER JOIN m_product C ON ... 

Próbowałem dając

DELETE B from m_productprice B INNER JOIN m_product C ON B.... 
ERROR: syntax error at or near "B" 

Próbowałem dając

ERROR: syntax error at or near "INNER" 
LINE 1: DELETE from m_productprice B INNER JOIN m_product C ON B.m_... 

co jest problem z moim zapytaniem?

+2

8.2? Powinieneś dokonać aktualizacji jak najszybciej. Ta wersja nie jest już obsługiwana. I proszę przeczytać instrukcję: nie ma "INNER JOIN" dostępnego dla instrukcji DELETE: http://www.postgresql.org/docs/8.2/static/sql-delete.html –

+0

dowolna alternatywna metoda wykonywania tego zapytania bez wewnętrznego dołącz – dude

+0

Zobacz w instrukcji, jest dokładnie przykład tego. –

Odpowiedz

37

Ten pracował dla mnie:

DELETE from m_productprice 
WHERE m_pricelist_version_id='1000020' 
     AND m_product_id IN (SELECT m_product_id 
          FROM m_product 
          WHERE upc = '7094'); 
+0

To działało również dla mnie. Twoje zdrowie! – Melvin

158
DELETE 
FROM m_productprice B 
    USING m_product C 
WHERE B.m_product_id = C.m_product_id AND 
     C.upc = '7094' AND     
     B.m_pricelist_version_id='1000020'; 

lub

DELETE 
FROM m_productprice 
WHERE m_pricelist_version_id='1000020' AND 
     m_product_id IN (SELECT m_product_id 
         FROM m_product 
         WHERE upc = '7094'); 
+0

Otrzymuję ten sam błąd !!! – dude

+0

@ 0mesh jej dla mysql .. moje wątpliwości dotyczy sql i postgre sql – dude

+0

zaktualizowałem mój post nadzieję, że masz odpowiedź. – Omesh

16

Inną formą, która współpracuje z PostgreSQL 9.1+ jest łączenie wspólnego wyrażenia tabela z pomocą instrukcji dla łączenia.

WITH prod AS (select m_product_id, upc from m_product where upc='7094') 
DELETE FROM m_productprice B 
USING prod C 
WHERE B.m_product_id = C.m_product_id 
AND B.m_pricelist_version_id = '1000020'; 
9

Wystarczy użyć podzapytania z INNER JOIN, LEFT JOIN lub smth else:

DELETE FROM m_productprice 
WHERE m_product_id IN 
(
    SELECT B.m_product_id 
    FROM m_productprice B 
    INNER JOIN m_product C 
    ON B.m_product_id = C.m_product_id 
    WHERE C.upc = '7094' 
    AND B.m_pricelist_version_id = '1000020' 
) 

celu optymalizacji kwerendy,

Powiązane problemy