我是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 =付款成员
答案 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不支持JOINs
与UPDATE
,而是使用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';