使用子查询更新,左连接

时间:2015-09-29 11:29:18

标签: mysql

我正在构建一个 UPDATE 查询,该查询受子查询中包含的WHERE子句的约束。

当我将其限制为以下内容时,此查询有效:

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

但是我的查询需要子查询中的另一个子查询。 下面是我的查询示例;

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列

2 个答案:

答案 0 :(得分:0)

  1. 错误意味着,它期望1个值但子查询返回多个结果(比如1 =(1,2,4)这是错误的)。要解决它,您可以在where子句中使用IN操作数而不是=(例如1 IN(1,2,4))。
  2. 子查询select不应在select子句中包含多个列u.idtotalLogins
  3. 尝试以下代码。希望这有效。

    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 
       )
    

答案 1 :(得分:0)

在子查询中,您有2列因此错误,从子查询中删除totalLogins。

另请注意,如果您的子查询返回的值超过1,则会再次给出错误,说明子查询返回的值超过1。请使用in而不是=