简体   繁体   English

MySQL子查询返回超过1行错误

[英]MySQL Subquery returns more than 1 row ERROR

I'm getting an error on my below mysql query. 我在下面的mysql查询中遇到错误。 Please note that my subquery supposed to be returned 1627862 results. 请注意,我的子查询应该返回1627862结果。 Is there any way to sort out this error with maintaining all the conditions of the subquery? 是否可以通过维护子查询的所有条件来解决此错误?

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');

ERROR 1242 (21000): Subquery returns more than 1 row 错误1242(21000):子查询返回的行数超过1

You could write this as an update join: 您可以将其写为更新联接:

UPDATE SUBSCRIPTION_LOG sl
INNER JOIN SUBSCRIPTION s
    ON sl.MSISDN = s.MSIDSN
SET sl.SUBSCRIPTION_STATUS = 'D',
    sl.DEACTIVATION_DATE = NOW(),
    sl.DEACTIVATION_CHANNEL = 'SYSTEM'
WHERE
    sl.SUBSCRIPTION_STATUS = 'A' AND
    sl.SHORT_CODE = '22222' AND
    DATEDIFF(NOW(), s.ACTIVATION_DATE) > s.LAST_CHARGED_VALIDITY AND
    s.OFFER_CODE NOT IN ('CAT_228','CAT_229','CAT_232','CAT_233') AND
    s.SHORT_CODE = '22222';

The equal = in your MSISDN commpare expects a single value to be returned by your subquery, but the subquery is returning multiple rows. MSISDN命令中的equal =期望子查询返回单个值,但是子查询返回多行。 In order for your query to work, change = to ìn as below 为了使您的查询正常工作, ìn =更改为ì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');

See if it works. 看看是否可行。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM