0

フォーマットの欠如を許してください!!! どういうわけか、他の人と同じようにきれいに見せる方法がわかりません...

久しぶりのロマー、初めてのポスター。私は MySql の初心者で、次のコードが機能しない理由を理解するのに苦労しています。

 UPDATE CUSTOMER_T

  SET Cust_Status = 'INACTIVE'

  WHERE (SELECT DISTINCT Cust_No, Cust_Last_Name, Cust_Status

FROM CUSTOMER_T NATURAL JOIN BILLING_T

WHERE BILLING_T.Cust_No = BILLING_T.Cust_No

AND (DATEDIFF(BILLING_T.Billing_Due_Date, BILLING_T.Billing_Date_Paid) < (-14)

AND CUSTOMER_T.Cust_Status = "ACTIVE") 

OR (CUSTOMER_T.Cust_Status = "ACTIVE"

AND BILLING_T.Billing_Date_Paid IS NULL));

私がやろうとしているのは、ステータスが ACTIVE で、請求が 14 日以上遅れている人を見つけることです

または、ACTIVE であり、Billing_Date_Paid フィールドのステータスが NULL である。

次に、それらを見つけたら、Cust_Status を「INACTIVE」に更新します。

単純に次を実行すると:

SELECT DISTINCT Cust_No, Cust_Last_Name, Cust_Status
FROM CUSTOMER_T NATURAL JOIN BILLING_T
     WHERE BILLING_T.Cust_No = BILLING_T.Cust_No
     AND (DATEDIFF(BILLING_T.Billing_Due_Date, BILLING_T.Billing_Date_Paid) < (-14)
     AND CUSTOMER_T.Cust_Status = "ACTIVE") 
        OR (CUSTOMER_T.Cust_Status = "ACTIVE"
            AND BILLING_T.Billing_Date_Paid IS NULL);

そうすれば、探している人を特定できます。ただし、このコードを UPDATE ステートメント (投稿した最初のコード) に取り込もうとすると、次のエラーが発生します。

Error Code: 1241. Operand should contain 1 column(s)
4

1 に答える 1

0

実際には、JOIN次のように更新で実行できます。

UPDATE CUSTOMER_T a
INNER JOIN BILLING_T b ON 
    a.Cust_No = b.Cust_No AND 
    a.Cust_Status = 'ACTIVE' AND 
    (
        b.Billing_Date_Paid IS NULL OR
        DATEDIFF(b.Billing_Due_Date, b.Billing_Date_Paid) < -14
    )
SET a.Cust_Status = 'INACTIVE'
于 2012-07-10T22:08:40.773 に答える