2014-01-23 27 views
0

我有一個數據庫與折扣卡記錄,我需要從主數據庫複製到其他具有相同struckture的信息。需要更新主DB的字段名稱,電話等。我需要的信息有三個表格:1.pers_cards(卡號)。 2.pers_clients(名稱,電話等)。 3個pers_accounts(該表由字段合併前兩個表的CLIENT_ID和ACCOUNT_ID) 我寫的劇本得到的信息,我需要:PostgreSQL,需要從CSV文件更新一些表格

Copy (SELECT pers_cards.card_num, pers_clients.name, pers_clients.address, 
      pers_clients.phone, pers_clients.mobilephone, pers_clients.email, 
      pers_clients.birthday,pers_clients.gender_male 
     FROM pers_cards,pers_accounts,pers_clients 
     WHERE (
      pers_accounts.client_id = pers_clients.client_id 
      and 
      pers_cards.acc_id = pers_accounts.acc_id 
    )) 
To 'f:/test.csv' With CSV; 

現在我需要使用此文件來更新其他BD,與個人信息更新領域(pers_clients.name,pers_clients.phone等),取決於它的卡號。 麻煩的是字段client_id和account_id在不同的表中有不同的值。

CREATE TABLE cards_temp 
(card_num varchar, name varchar, address varchar, 
phone varchar, mobilephone varchar, email varchar, birthday date, gender_male bool); 

COPY cards_temp FROM 'f:/test.csv' DELIMITER ',' CSV; 

UPDATE cards cards 
SET name = cards_temp.name 
FROM cards_temp 
WHERE cards_temp.card_num = cards.card_num; 

如何更新我的主表:

UPDATE pers_clients 
SET name = cards_temp.name 
FROM cards_temp 
WHERE cards_temp.card_num = (SELECT pers_cards.card_num 
FROM pers_cards,pers_accounts,pers_clients 
WHERE (
pers_accounts.client_id = pers_clients.client_id and pers_cards.acc_id = pers_accounts.acc_id)); 
+0

...這是標籤爲'mysql'爲什麼? –

+0

腳本語言是一樣的,不是嗎? – Sanyo4ever

+0

呃,沒有。它們共享一個共同的子集,SQL,但命令語言差別很大。如果是,那麼'postgresql'和'mysql'標籤就沒有意義了。 –

回答

0

你可以加入你的TEMP表和使用領域從它的更新來更新每個目標表的主要原因之一

UPDATE pers_clients AS clients 
SET name = tmp_cards.name, 
    address = tmp_cards.address, 
    phone = tmp_cards.phone, 
    mobilephone = tmp_cards.mobilephone, 
    email = tmp_cards.email, 
    birthday = tmp_cards.birthday, 
    gender_male = tmp_cards.gender_male 
FROM pers_accounts AS accounts, pers_cards AS cards, cards_temp AS tmp_cards 
WHERE accounts.client_id = clients.client_id 
AND accounts.acc_id = cards.acc_id 
AND cards.card_num = tmp_cards.card_num 
+0

我的保護程序,完美的作品,這就是我正在尋找。謝謝 – Sanyo4ever

1

你會想:

  • 創建一個UNLOGGED表CSV數據
  • COPY的數據結構到新的未記錄表
  • 使用一系列的SQL UPDATE ... FROM條語句使用連接對未註冊滿桌子的臨時數據
  • 刪除未記錄表
+0

有沒有,現在需要創建賴特腳本來更新我的主表 – Sanyo4ever