2015-09-29 4 views
0

Я создаю запрос UPDATE, который подчиняется предложению WHERE, содержащемуся в подзапросе.UPDATE With Subquery, Left Join

этот запрос работает, когда я ограничиваю его к чему-то вроде этого:

WHERE id= 
( 
    SELECT 
     u.id 
    FROM USER u 
    WHERE 
    u.live = 1 
) 

однако мой запрос требует дальнейшего подзапрос внутри subsquery. ниже - пример моего запроса;

UPDATE newsletters  
SET personalHtml =2 
    WHERE id= 
    (
     SELECT 
     u.id, 
     (SELECT 
      COUNT(lo.userId) 
      FROM  
      list_members_login lo 
       WHERE 
        u.id = lo.userId 
       ) as totalLogins 

       FROM 
        user u 
       WHERE 
        u.live = 1 
       AND 
        u.jobId IN (2,4) 
       GROUP BY 
        u.id  
        HAVING 
         totalLogins >= 4 
       ) 

я получаю следующее сообщение об ошибке:

Операнд должен содержать 1 столбец (ы)

+0

Вы не можете передать несколько идентификатора в **, где **. PLZ использовать mysql ** в ** –

+0

@ Rahautos вы должны разместить его как ответ – Mchl

+0

У вас есть 2 столбца в вашем подзапросе –

ответ

0
  1. ошибка означает, что это ожидает значение 1, но подзапрос, возвращающий несколько результатов (скажем, 1 = (1,2,4), что неверно). Чтобы решить эту проблему, вы можете использовать операнд IN вместо = in where clause (скажем 1 IN (1,2,4)).
  2. Выбор подзапроса не должен содержать несколько столбцов u.id и totalLogins в предложении select.

Попробуйте ввести код. Надеюсь, это сработает.

UPDATE newsletters  
SET personalHtml =2 
WHERE id IN 
(
    SELECT 
     u.id 
    FROM 
      user u 
    WHERE 
      u.live = 1 
    AND 
      u.jobId IN (2,4) 
    GROUP BY 
      u.id  
    HAVING 

      (SELECT 
        COUNT(lo.userId) 
        FROM  
        list_members_login lo 
        WHERE 
        u.id = lo.userId 
      ) >= 4 
    ) 
+0

Привет Ranjana.thanks для ответа. Я попробовал ваше решение, но я все равно получаю то же сообщение об ошибке. –

+0

Эй, я обновил запрос в ответ. Посмотрите Plz. – Ranjana

0

В вашем подзапросе у вас есть 2 столбца, следовательно, ошибка, удалите totalLogins из подзапроса.

Также следует отметить, что если ваш подзапрос возвращает более чем на 1 значение, которое он снова даст вам сообщение об ошибке с указанием подзапроса returna более 1 value.Consider использования в вместо =