这是我在SQL Server 2008中的基本SQL查询:
SELECT userID
FROM coreUsers
INNER JOIN pluginSales ON coreUser.userID = pluginSales.userID
WHERE (coreUser.CurrentYear = '2014')
AND (pluginSales.PaidShipping = 'Yes')
OR (coreUser.IsContract = 'Yes')
刚刚在2014年12月19日进行了测试,这会返回61个结果。
我需要能够为上述语句产生的所有记录更新pluginSales
表格列ShipppingDate
。
coreUser.userID
是我自动增加的唯一键。
pluginSales
有一列ShippingDate
,如果记录设置为2014(varchar
),我需要更新'12/16/2014'
标准coreUser.CurrentYear
他们是PaidShipping(pluginSales.PaidShipping
)或者如果他们是签约客户(coreUser.IsContract
)
编辑#1
我尝试了以下内容......
UPDATE pluginSales
SET ShippingDate = ''
FROM coreUsers AS cu INNER JOIN
pluginSales AS pis ON cu.userID = pis.userID CROSS JOIN
pluginSales
WHERE (cu.CurrentYear = '2014') AND (pis.PaidShipping = 'Yes' OR pis.IsContract = 'Yes')
刚刚在2014年12月19日再次测试了这条修改过的554条记录(我的整个pluginSales数据库)
这影响了我的行的ALLLLLL,而不仅仅是具体的行。请指教。
答案 0 :(得分:3)
您可以使用update
和join
:
UPDATE cu
SET ShippingDate '12/16/2014'
FROM coreUsers cu INNER JOIN
pluginSales pis
ON cu.userID = pis.userID
WHERE (cu.CurrentYear = '2014' AND (pis.PaidShipping = 'Yes') OR (pis.IsContract = 'Yes');
您可能真的想要这个where
子句:
WHERE (cu.CurrentYear = '2014') AND (pis.PaidShipping = 'Yes' OR pis.IsContract = 'Yes');
请注意,您不应该将日期存储在字符串中。相反,您应该使用原生date
或datetime
类型。如果必须将日期存储为字符串,则应使用YYYY-MM-DD格式,因此order by
和比较等操作将对值进行处理。
答案 1 :(得分:1)
首先运行选择
SELECT *
FROM pluginSales PS
INNER JOIN coreUsers CU ON CU.userID = PS.userID
WHERE (CU.CurrentYear = '2014')
AND (PS.PaidShipping = 'Yes')
OR (CU.IsContract = 'Yes')
然后只将第一行更改为UPDATE ...
UPDATE pluginSales SET ShippingDate = '12/16/2014'
FROM pluginSales PS
INNER JOIN coreUsers CU ON CU.userID = PS.userID
WHERE (CU.CurrentYear = '2014')
AND (PS.PaidShipping = 'Yes')
OR (CU.IsContract = 'Yes')
您的Where子句有OR。您可能希望使用括号()明确分组。