2013-02-16 53 views
0

在我的客戶表中,有一行稱爲* inactive_status *,它始終設置爲'Active'。這是除非* is_paid *(位於Billing_Info表)設置爲0.我需要使用更新命令,但無法弄清楚。以下是我迄今爲止:SQL從一個表更新到另一個表,沒有公共數據

UPDATE Customer 
SET inactive_status = 'INACTIVE' 
WHERE 
(SELECT is_paid 
FROM Billing_Info 
WHERE billing_info.is_paid = 0); 

DDL:

CREATE TABLE billing_info ( 
    billing_info_id INT, 
    bill_day_id INT, 
    is_past_due NUMBER(1,0) NOT NULL, 
    date_last_paid DATE, 
    is_paid_this_month NUMBER(1,0) NOT NULL, 
    paid_amount DECIMAL(6,2) NOT NULL, 
    bill_amount DECIMAL(6,2) NOT NULL, 
    CONSTRAINT billing_info_id_pk PRIMARY KEY(billing_info_id)); 

CREATE TABLE customer ( 
    customer_id INT, 
    join_date DATE NOT NULL, 
    billing_info_id INT NOT NULL, 
    inactive_status VARCHAR2(25), 
    contact_info_id INT NOT NULL, 
    CONSTRAINT customer_id_pk PRIMARY KEY (customer_id)); 

有什麼建議?

+0

在您的billing_info表中應該有一個customer_id。否則,您如何知道哪些Cusomters應該更新? – CoffeeMonster 2013-02-16 02:49:39

+0

有,但是customer_id與inactive_status沒有任何關係。我正在使用別人的工作,不能回去改變任何東西。基本上每個客戶都有儲存在多個表格中的信息,而我正在處理的數據現在沒有鏈接,但需要鏈接。 – Comicstorm 2013-02-16 03:21:32

+0

請發佈您的DDL(創建表語句)'Customer'和'Billing_Info'兩個表。 – peterm 2013-02-16 03:42:16

回答

0

您應該調查觸發器的使用。設置一個觸發器,當is_paid標誌變爲0時,特定客戶的inactive_status更新爲'INACTIVE'將是最佳解決方案。

+0

非常好的建議!如果我熟悉觸發器,對我來說會更好,但不幸的是我只是一個初學者。謝謝! 我發現我可以這樣做,或者將表B_Init_Info中的inactive_status和更新方式。沒想到會起作用,但嘿,我不能抱怨。 – Comicstorm 2013-02-16 04:44:30

0

customer連接到billing_info的唯一東西是billing_info_id

如果您的RDBMS是Oracle的UPDATE查詢可能看起來像這樣

UPDATE (SELECT c.inactive_status 
      FROM customer c INNER JOIN 
       billing_info b ON c.billing_info_id = b.billing_info_id 
     WHERE b.is_paid_this_month = 0) 
    SET inactive_status = 'INACTIVE'; 

這是假設的關係是1比1,這是很難說肯定從你的DDL。

這裏是sqlfiddle

相關問題