我在下面的mysql查询中遇到错误。请注意,我的子查询应该返回1627862结果。是否可以通过维护子查询的所有条件来解决此错误?

UPDATE SUBSCRIPTION_LOG
SET SUBSCRIPTION_STATUS='D',
    DEACTIVATION_DATE=NOW(),
    DEACTIVATION_CHANNEL='SYSTEM'
WHERE SUBSCRIPTION_STATUS ='A'
AND SHORT_CODE='22222'
AND MSISDN =(SELECT MSISDN
             FROM SUBSCRIPTION
             WHERE DATEDIFF(NOW(),`ACTIVATION_DATE`) > LAST_CHARGED_VALIDITY
             AND OFFER_CODE NOT IN ('CAT_228','CAT_229','CAT_232','CAT_233')
             AND SHORT_CODE = '22222');



  错误1242(21000):子查询返回的行数超过1

最佳答案

MSISDN命令中等于=的期望子查询返回单个值,但是子查询返回多行。为了使您的查询正常工作,请将=更改为ìn,如下所示

UPDATE SUBSCRIPTION_LOG SET SUBSCRIPTION_STATUS='D', DEACTIVATION_DATE=NOW(),
DEACTIVATION_CHANNEL='SYSTEM' WHERE SUBSCRIPTION_STATUS ='A'
AND SHORT_CODE='22222'
AND MSISDN in (SELECT MSISDN
            FROM SUBSCRIPTION
         WHERE DATEDIFF(NOW(),`ACTIVATION_DATE`) > LAST_CHARGED_VALIDITY
         AND OFFER_CODE NOT IN ('CAT_228','CAT_229','CAT_232','CAT_233')
         AND SHORT_CODE = '22222');


看看是否可行。

关于mysql - MySQL子查询返回超过1行错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51646355/

10-13 06:51
查看更多