【问题标题】:Update table column on the basis of another table column在另一个表列的基础上更新表列
【发布时间】:2012-11-25 07:15:16
【问题描述】:

我有 2 张桌子。 'report' 和 'panel_calculation' 是表格。

report contains:

r_zone   r_address    r_status
=======+==========+============
1          8             0
2          9             0
2          6             0
7          9             0
3          2             0


panel_calculation contains:

p_cal_zone  p_cal_address  p_status
===========+==============+============
7                9             1
3                2             1

我需要在'panel_calculation'表的基础上更新'report'表中的r_status列。

这样最终的结果会是这样的:

Final 'report' should be like this:

r_zone   r_address    r_status
=======+==========+============
1          8             0
2          9             0
2          6             0
7          9             1
3          2             1

我需要你的建议。

【问题讨论】:

    标签: php mysql compare


    【解决方案1】:

    即使在更新表格时,您仍然可以加入这两个表格。

    UPDATE  report s
            INNER JOIN panel_calculation b
                ON s.r_zone = b.p_cal_zone
    SET     s.r_status = b.p_status
    

    【讨论】:

      【解决方案2】:

      试试这个:

      UPDATE report r
      INNER JOIN panel_calculation p ON r.r_zone = p.p_cal_zone 
      SET r.r_status = p.p_status;
      

      SQL Fiddle Demo

      【讨论】:

      • 感谢您的帮助 :) 我已经尝试过了,但没有任何反应.. 只是无法弄清楚发生了什么:(
      • @Kalid - 不客气。您能否发布您尝试过的确切查询。如果可能的话更新sample demo,解释这个问题。谢谢。
      • 谢谢 :) 我想通了....终于解决了..使用了这个“更新报告 SET r_status=(SELECT p_cal_status FROM panel_calculation WHERE p_cal_zone=report.r_zone AND p_cal_address=r_address )";
      【解决方案3】:

      作为您的问题的解决方案,请尝试执行以下 sql 查询

        update report r set r_status=(select p_status from panel_calculation where p_cal_zone=r.r_zone limit 1 )
      

      【讨论】:

        【解决方案4】:

        您可以像这样使用 LEFT JOIN:

        UPDATE report t1
        LEFT JOIN panel_calculation t2
            ON t1.r_zone=t2.p_cal_zone
            AND t1.r_address=t2.p_cal_address
        SET t1.r_status=t2.p_status
        

        【讨论】:

        • 在这种情况下,左连接并不是真正必要的
        猜你喜欢
        • 1970-01-01
        • 2023-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多