簡體   English   中英

用子查詢更新,左聯接

[英]UPDATE With Subquery, Left Join

我正在建立一個受子查詢中包含的WHERE子句約束的UPDATE查詢。

當我將查詢限制為以下內容時,此查詢有效:

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列

  1. 該錯誤意味着,它期望值為1,但子查詢返回多個結果(例如1 =(1,2,4),這是錯誤的)。 要解決它,您可以使用IN操作數代替where子句中的=(例如1 IN(1,2,4))。
  2. 子查詢選擇不應該包含多個列u.idtotalLogins在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 
   )

在您的子查詢中,您有2列,因此出現錯誤,請從子查詢中刪除totalLogins。

還需要注意的是,如果您的子查詢返回的值大於1,它將再次給您錯誤,指出子查詢返回的值大於1.考慮使用in代替=

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM