【问题标题】:MySQL (Wordpress) - inner join when updatingMySQL (Wordpress) - 更新时的内连接
【发布时间】:2012-11-17 21:40:36
【问题描述】:

我正在尝试将可以找到重复 post_title 的任何“新”记录的字段 post-status 更新为“草稿”。以下选择查询按预期工作并显示我要更新的记录 -

select a.* FROM wp_posts AS a INNER JOIN (SELECT Greater1.post_title, Titles.ID, 
Greater1.MinID FROM (SELECT post_title, MIN(ID) AS 'MinID', MAX(ID) AS 'MaxID' FROM 
wp_posts WHERE post_type = 'post' AND post_status = 'publish' GROUP BY post_title 
HAVING COUNT(post_title)>1) AS Greater1 LEFT JOIN (SELECT post_title, ID FROM 
wp_posts) AS Titles ON Greater1.post_title = Titles.post_title WHERE ID > MinID) AS 
b ON a.ID = b.ID WHERE a.ID = b.ID

但是下面的更新查询给出了语法错误。有什么帮助吗?

update a.wp_posts set a.post_status='draft' FROM wp_posts AS a INNER JOIN (SELECT 
Greater1.post_title, Titles.ID, Greater1.MinID FROM (SELECT post_title, MIN(ID) AS 
'MinID', MAX(ID) AS 'MaxID' FROM wp_posts WHERE post_type = 'post' AND post_status = 
'publish' GROUP BY post_title HAVING COUNT(post_title)>1) AS Greater1 LEFT JOIN 
(SELECT post_title, ID FROM wp_posts) AS Titles ON Greater1.post_title = 
Titles.post_title WHERE ID > MinID) AS b ON a.ID = b.ID WHERE a.ID = b.ID

非常感谢。

【问题讨论】:

  • 也许你应该去掉围绕 MinID 和 MaxID 的那些引号
  • 你从mysql得到的错误是什么?

标签: mysql sql wordpress


【解决方案1】:

您使用的语法是MSSQL,这是MySQL

UPDATE wp_posts AS a
        INNER JOIN 
        (
            SELECT Greater1.post_title,
                    Titles.ID,
                    Greater1.MinID
            FROM 
            (
                    SELECT post_title,
                            MIN(ID) AS 'MinID',
                            MAX(ID) AS 'MaxID'
                    FROM wp_posts
                    WHERE post_type = 'post'
                            AND post_status = 'publish'
                    GROUP BY post_title
                    HAVING COUNT(post_title) > 1
            ) AS Greater1
                LEFT JOIN 
                (
                    SELECT post_title,
                            ID
                    FROM wp_posts
                ) AS Titles
                    ON Greater1.post_title = Titles.post_title
            WHERE ID > MinID
        ) AS b ON a.ID = b.ID
SET a.post_status = 'draft'
WHERE a.ID = b.ID

【讨论】:

    【解决方案2】:

    试试下面:

    UPDATE wp_posts AS a,
     (SELECT Greater1.post_title,
      Titles.ID, Greater1.MinID 
      FROM 
        (SELECT post_title, 
                MIN(ID) AS 'MinID', 
                MAX(ID) AS 'MaxID' 
          FROM wp_posts 
          WHERE post_type = 'post' AND post_status = 'publish' 
          GROUP BY post_title HAVING COUNT(post_title)>1) AS Greater1 
          LEFT JOIN (
                SELECT post_title, ID 
                FROM wp_posts) AS Titles 
           ON Greater1.post_title = Titles.post_title 
           WHERE ID > MinID) AS b
      SET a.post_status='draft'
      WHERE a.ID = b.ID;
    

    语法:

    UPDATE TABLE1, TABLE2..
    SET COLUMN1 = ..., COLUMN2 = ...
    WHERE TABALE1.FOREIGN_KEY_ID= TABLE2.ID  //<--joining condition
    AND TABLE1.COLUMN1=... //<--filter condition
    

    【讨论】:

      猜你喜欢
      • 2014-08-19
      • 2013-12-10
      • 2011-07-03
      • 2019-03-27
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-08
      相关资源
      最近更新 更多