SQL Update从一个表到另一个表,没有通用数据

时间:2013-02-16 02:39:41

标签: mysql oracle-sqldeveloper

在我的客户表中,有一行名为* inactive_status *,始终设置为“有效”。这是除非* is_paid *(位于 Billing_Info 表中)设置为0.我需要使用Update命令,但无法弄明白。以下是我到目前为止的情况:

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) );

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

您应该调查触发器的使用。设置触发器,使特定客户inactive_status'INACTIVE'标志更改为0时更新为is_paid将是完美的解决方案。

答案 1 :(得分:0)

customerbilling_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