MySQL Subquery возвращает более 1 строки ОШИБКА

0

Я получаю сообщение об ошибке в моем ниже запросе 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 строки

  • 1
    Если вы хотите обновить все строки, которые соответствуют значениям, которые вам нужны IN . Равен требует, чтобы одно значение было возвращено.
  • 2
    Вы можете использовать вместо JOIN
Теги:
subquery

2 ответа

2
Лучший ответ

Значение equal = в вашей MSISDN commpare ожидает, что ваш подзапрос возвращает одно значение, но в подзапросе возвращается несколько строк. Чтобы ваш запрос работал, измените = на " ì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');

Посмотрите, работает ли это.

  • 0
    Это сработало. Большое спасибо.
2

Вы можете написать это как соединение обновления:

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';
  • 0
    После выполнения вышеуказанного запроса я получаю эту ошибку. Column 'SUBSCRIPTION_STATUS' in field list is ambiguous .
  • 2
    @Rezuan Добавьте псевдонимы ко всему в предложении SET , чтобы ссылаться на первую (целевую) таблицу.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню