根据相关表中的条件更新了SQL字段

时间:2013-06-05 02:52:12

标签: sql join subquery

我是SQL的新手,尽管经过了数小时的搜索,根据我的付款表中的条件,无法找出更新我的成员表中记录的SQL查询。我是否使用JOIN(如果是这样的话)或子查询我很困惑?

这是我到目前为止所拥有的:

UPDATE wp_mcra_members

SET  wp_mcra_members.dues_paid = 1

JOIN wp_mcra_payments ON wp_mcra_payments.member  = wp_mcra_members.ID 

WHERE wp_mcra_payments.year_paid = '2013' and wp_mcra_payments.reason = 'Dues';

我希望数据库搜索Payments表中符合2013年条件并标记为Dues的任何记录。然后我希望Members表根据符合条件的任何找到的记录更新字段dues_paid,其中成员ID =付款成员

2 个答案:

答案 0 :(得分:1)

update join的语法因数据库而异。以下是使用where子句中的子查询的通用语法:

UPDATE wp_mcra_members
    SET dues_paid = 1
    where wp_mcra_members.id in (select wp_mcra_payments.member
                                 from wp_mcra_payments
                                 WHERE wp_mcra_payments.year_paid = '2013' and
                                       wp_mcra_payments.reason = 'Dues'
                                ) ;

答案 1 :(得分:0)

如果您使用的是SQL Server,那么您提供的语法看起来会起作用。 Oracle不支持JOINsUPDATE,而是使用MERGE或者Gordon的回答也适用于那里。

假设您使用的是MySQL,JOIN语句中的UPDATE可能会比使用IN提供更好的效果:

UPDATE wp_mcra_members
    JOIN wp_mcra_payments ON wp_mcra_payments.member = wp_mcra_members.ID 
SET  wp_mcra_members.dues_paid = 1
WHERE wp_mcra_payments.year_paid = '2013' 
    and wp_mcra_payments.reason = 'Dues';