[英]Subqueries in SQL
我试图找出一种对数据库进行更新的方法,但我一直失败。 我真的想不出别的东西。
IF @EventID = 9
BEGIN
declare @HwanLevel int;
UPDATE SRO_VT_SHARD.._Char set HwanLevel = 1 WHERE CharID in (SELECT TOP(1) EXP,LEVEL,CONTRIBUTION FROM SRO_VT_SHARD.._CharTrijob WHERE JobType = 1 AND CharID = @CharID)
UPDATE SRO_VT_SHARD.._Char set HwanLevel = 2 WHERE CharID in (SELECT TOP(1) EXP,LEVEL,CONTRIBUTION FROM SRO_VT_SHARD.._CharTrijob WHERE JobType = 2 AND CharID = @CharID)
UPDATE SRO_VT_SHARD.._Char set HwanLevel = 3 WHERE CharID in (SELECT TOP(1) EXP,LEVEL,CONTRIBUTION FROM SRO_VT_SHARD.._CharTrijob WHERE JobType = 3 AND CharID = @CharID)
END
OHH,当我尝试使用它时,我一直在服用; “当未使用EXISTS引入子查询时,只能在选择列表中指定一个表达式。” 我曾尝试加入等,但并没有真正解决问题。 我想做的是:
SELECT Top(1) EXP,Contribution,Level
THEN check if Jobtype = 1 then set HwanLevel to 1
if jobtype = 2 then set hwanlevel to 2
etc until 3
您要返回的子查询声明了太多字段。 仅返回一个字段。 所以它应该看起来:
SELECT CharID
FROM SRO_VT_SHARD.._CharTrijob
WHERE JobType = 1 AND CharID = @CharID
您的top(1)仅将响应查询中的ORDER BY子句。 最好按照以下方式进行操作:
UPDATE SRO_VT_SHARD.._Char SET HwanLevel = Jobtype WHERE Jobtype = (select top(1)
Jobtype FROM SRO_VT_SHARD.._CharTrijob ORDER BY EXP,LEVEL,CONTRIBUTION)
当然,这取决于ORDER BY中的列顺序,如果给定的顺序产生了顶级玩家,那么好,否则您可以在ORDER BY中重新排序该顺序,即:
...ORDER BY CONTRIBUTION,EXP,LEVEL
如何使用变量,根据TOP 1 SELECT给出的Jobtype设置变量,然后从变量更新另一个表:
DECLARE @HWANLEVEL INT
SET @HWANLEVEL = (SELECT TOP 1 Jobtype FROM SRO_VT_SHARD.._CharTrijob
ORDER BY EXP,LEVEL,CONTRIBUTION)
UPDATE SRO_VT_SHARD.._Char SET HwanLevel = @HWANLEVEL
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.