0

在我的客户表中,有一行名为 *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) );

有什么建议么?

4

2 回答 2

0

唯一将 a 连接customer到 a 的billing_infobilling_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

于 2013-02-16T04:47:20.403 回答
0

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

于 2013-02-16T03:40:51.750 回答