在我的客户表中,有一行名为* 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) );
有什么建议吗?
答案 0 :(得分:0)
您应该调查触发器的使用。设置触发器,使特定客户inactive_status
在'INACTIVE'
标志更改为0时更新为is_paid
将是完美的解决方案。
答案 1 :(得分: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中确定。