【问题标题】:How to update multiple table using INNER JOIN and multiple SELECT如何使用 INNER JOIN 和多个 SELECT 更新多个表
【发布时间】:2019-01-23 10:49:32
【问题描述】:

我正在尝试使用内部联接更新 2 个表,并使用变量的 2 个结果设置值。我终于成功地让它适用于 SELECT。 我想更新具有长 where 子句的表。并设置选择查询的结果。

代码很好,选择我得到我的结果:

SET @DefID = "5289";

SELECT pt1.ID, pt1.post_title, pt1.post_content, mt2.meta_value
FROM wp_posts AS pt1

INNER JOIN wp_postmeta AS mt1
ON ( pt1.ID = mt1.post_id )
INNER JOIN wp_postmeta AS mt2
ON ( pt1.ID = mt2.post_id )
INNER JOIN wp_postmeta AS mt3
ON ( pt1.ID = mt3.post_id )

WHERE 
    pt1.ID != @DefID
AND
    pt1.post_title LIKE '%Banda Sea DIVING Cruise with Tidak%'
AND 
    mt1.meta_key = 'tourmaster-tour-date-avail'
AND 
    CAST(mt1.meta_value AS DATE) >= '2019-01-23'
AND 
    mt2.meta_key = '_cornerstone_data'
AND 
    mt3.meta_key = 'tourmaster-tour-duration'
AND 
    mt3.meta_value = '10'
AND    
    pt1.post_type = 'tour'
AND 
    pt1.post_status = 'publish'

ORDER BY mt1.meta_value ASC

但不能使用 UPDATE

SET @DefID = "myID";
SET @post_content = ( SELECT wp_posts_bak.post_content FROM wp_posts_bak WHERE wp_posts_bak.ID = @DefID );
SET @meta_value = ( SELECT wp_postmeta_bak.meta_value FROM wp_postmeta_bak WHERE wp_postmeta_bak.post_id = @DefID AND wp_postmeta_bak.meta_key = '_cornerstone_data');

UPDATE wp_posts_bak AS pt1, wp_postmeta_bak AS mt0

INNER JOIN wp_postmeta_bak AS mt1 ON pt1.ID = mt1.post_id
INNER JOIN wp_postmeta_bak AS mt2 ON pt1.ID = mt2.post_id
INNER JOIN wp_postmeta_bak AS mt3 ON pt1.ID = mt3.post_id

SET 
    pt1.post_content  = @post_content,
    mt0.meta_value = @meta_value

WHERE
    pt1.ID != @DefID
AND 
    pt1.post_title LIKE '%Banda Sea DIVING Cruise with Tidak%'
AND 
    mt1.meta_key = 'tourmaster-tour-date-avail'
AND 
    CAST(mt1.meta_value AS DATE) >= '2019-01-23'
AND 
    mt2.meta_key = '_cornerstone_data'
AND 
    mt3.meta_key = 'tourmaster-tour-duration'
AND 
    mt3.meta_value = '10'
AND    
    pt1.post_type = 'tour'
AND 
    pt1.post_status = 'publish'

得到以下错误:'on 子句中的未知列'pt1.ID'。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    我终于找到了问题的原因。在 UPDATE 中,我必须删除 2 个表。

    所以解决办法是:

    SET @DefID = "5289";
    SET @post_content = ( SELECT wp_posts_bak.post_content FROM wp_posts_bak WHERE wp_posts_bak.ID = @DefID );
    SET @meta_value = ( SELECT wp_postmeta_bak.meta_value FROM wp_postmeta_bak WHERE wp_postmeta_bak.post_id = @DefID AND wp_postmeta_bak.meta_key = '_cornerstone_data');
    
    UPDATE wp_posts_bak AS pt1
    
    INNER JOIN wp_postmeta_bak AS mt1 ON pt1.ID = mt1.post_id
    INNER JOIN wp_postmeta_bak AS mt2 ON pt1.ID = mt2.post_id
    INNER JOIN wp_postmeta_bak AS mt3 ON pt1.ID = mt3.post_id
    
    SET 
        pt1.post_content  = @post_content,
        mt2.meta_value = @meta_value
    
    WHERE
        pt1.ID != @DefID
    AND 
        pt1.post_title LIKE '%Banda Sea DIVING Cruise with Tidak%'
    AND 
        mt1.meta_key = 'tourmaster-tour-date-avail'
    AND 
        CAST(mt1.meta_value AS DATE) >= '2019-01-23'
    AND 
        mt2.meta_key = '_cornerstone_data'
    AND 
        mt3.meta_key = 'tourmaster-tour-duration'
    AND 
        mt3.meta_value = '10'
    AND    
        pt1.post_type = 'tour'
    AND 
        pt1.post_status = 'publish'
    

    【讨论】:

      猜你喜欢
      • 2011-03-03
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多