2013-06-05 146 views
0

我是SQL新手,尽管经过了几个小时的搜索,但无法根据我的支付表中的条件找出更新SQL成员表中的记录的SQL查询。我很困惑我是否使用JOIN(如果是的话)或者子查询?根据相关表中的条件更新了SQL字段

这是我到目前为止有:

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'; 

我想存入数据库,以搜索在付款表中满足我的是2013年和标记会费条件的任何记录。然后,我希望Members表根据任何找到的符合这些条件的记录更新字段dues_paid,其中成员ID =付款成员

+2

是否使用的是RDBMS?你的语法应该适用于SQL Server,但是MySQL在使用'SET'之前需要'JOIN'。语法根据数据库而不同。 – sgeddes

+0

我正在使用MySQL。您提供的解决方案非常完美。非常感谢你的帮助。 – JMQUIG

回答

0

你提供看起来会,如果你正在使用SQL Server工作的语法。 Oracle不支持JOINsUPDATE,而是使用MERGE查看,或者Gordon的答案也可以在那里工作。

UPDATE陈述但是假设你正在使用MySQL,一个JOIN可能会比使用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'; 
+0

此解决方案也工作(使用加入) - 谢谢 – JMQUIG

+0

@JQUIS - np,很高兴我们可以帮助! – sgeddes

1

updatejoin的语法因数据库而异。这里是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' 
           ) ; 
+0

此解决方案工作(使用子查询) - 谢谢 – JMQUIG

相关问题