Atualizando uma tabela com dados de outra tabela com o SQL local

A frase UPDATE do SQL local (o SQL usado pelo BDE) não suporta o JOIN ... Então como atualizar uma tabela com dados de outra tabela?

Atualizando uma tabela com dados de outra tabela com o SQL Local

+-------------+         +-------------+

|  Orders.db  |        | Customer.db |

+-------------+        +-------------+

|   CustNo    | <<--------->  |    CustNo   |

| ShipToAddr1 |        |    Addr1    |

| ShipToAddr2 |        | Addr2 |

+-------------+         +-------------+


Partindo do pressuposto de que queremos atualizar os campos ShipToAddr1 e ShipToAddr2 da tabela Orders.db com os valores dos campos Addr1 e Addr2 da tabela Customer.db respectivamente, para os registros de encomendas que tenham ambos campos em branco, e unindo as tabelas pelo campo CustNo presente em ambas as tabelas, podemos escrever:

    UPDATE Orders INNER JOIN Customer

    ON Customer.CustNo = Orders.CustNo

    SET ShipToAddr1 = Addr1, ShipToAddr2 = Addr2

    WHERE ShipToAddr1 = "" AND ShipToAddr2 = ""

No entanto, no SQL local (aquela utilizada pela BDE), junções não são suportadas nas frases UPDATE, e temos que usar subqueries para alcançar o resultado esperado:

    UPDATE Orders

    SET ShipToAddr1 = (SELECT Addr1 FROM Cliente WHERE Customer.CustNo = Orders.CustNo),

           ShipToAddr2 = (SELECT Addr2 FROM customer WHERE Customer.CustNo = Orders.CustNo)

    WHERE ShipToAddr1 = "" AND ShipToAddr2 = ""


Na "frase UPDATE" do Guia SQL Local você pode encontrar um exemplo de uma relação 1-para-muitos que utiliza o agrupamento subqueries.