0

私のCustomerテーブルには、* inactive_status *という行があり、これは常に'Active'に設定されています。これは、* 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

トリガーの使用を調査する必要があります。特定の顧客のフラグが0に変更されたときにinactive_status更新されるようにトリガーを設定することは、完璧なソリューションです。'INACTIVE'is_paid

于 2013-02-16T03:40:51.750 に答える
0

customeraをaに接続するのは。だけ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です

于 2013-02-16T04:47:20.403 に答える