Categorias
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 |
+-------------+ +-------------+
| 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.