首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用条件来检查2件事情,当2为真时,它会给出一个信息。

如何使用条件来检查2件事情,当2为真时,它会给出一个信息。
EN

Stack Overflow用户
提问于 2020-10-17 20:35:04
回答 1查看 44关注 0票数 1

我编写了一个代码来告诉我一个rpg游戏中有多少玩家在使用一个特定的类(所以我也检查了一手剑、剑和二手剑,它应该告诉我任何手握剑的100级以上玩家的姓名和级别,这是代码:

代码语言:javascript
复制
declare @level varchar(100)
set @level=80

select level,name from characters c
inner join items i on i.characterId=c.characterId
where
( level>@level AND equipSlot=5 and ( 
itemId=2002 OR --short sword
itemId=2005 OR --steel rapier
itemId=2010 OR --volt sword
itemid=2012 OR --goblin knife
itemId=2017 OR --crimson sword
itemId=2026 OR --tree splitter sword
itemId=2031 OR --sea king sword
itemId=2034 OR --acrodont blade
itemid=2054 OR --halloween sword
itemId=2059 --stinger
))
and
(level>@level and equipSlot=6 and ( 
itemId=2002 OR --short sword
itemId=2005 OR --steel rapier
itemId=2010 OR --volt sword
itemid=2012 OR --goblin knife
itemId=2017 OR --crimson sword
itemId=2026 OR --tree splitter sword
itemId=2031 OR --sea king sword
itemId=2034 OR --acrodont blade
itemid=2054 OR --halloween sword
itemId=2059 --stinger
))
ORDER by level desc

因此,我检查第一手(equipslot=6),检查一个可用的剑是否装备,那么如果二手(equipslot=5)也有剑,这意味着这家伙正在使用2剑类。

但是,当我在两个括号之间放一个and时,它什么也做不了。它显示了当我使用or时,所有的人都直接使用剑,所以不使用2把剑的人也出现了。

我不知道如何选择球员的名字和等级一次(因为当他们使用两把剑,他们的名字出现两次而不是一次),所以检查他们的手,如果他们手里有剑,显示他们的名字和级别。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-17 20:40:04

您需要检查属于给定字符的items组是否满足以下条件,这意味着聚合:

代码语言:javascript
复制
select c.name 
from characters c
inner join items i on i.characterId=c.characterId
where 
    i.level > @level
    and i.equipslot in (5, 6)
    and i.itemid in (2002, 2005, 2010, 2012, 2017, 2026, 2031, 2034, 2054, 2059)
group by c.name
having count(distinct equipslot) = 2

如果要显示每只手的级别,可以:

代码语言:javascript
复制
select c.name, 
    max(case when i.equipslot = 5 then level end) level_hand_5,
    max(case when i.equipslot = 6 then level end) level_hand_6
from characters c
inner join items i on i.characterId=c.characterId
where 
    i.level > @level
    and i.equipslot in (5, 6)
    and i.itemid in (2002, 2005, 2010, 2012, 2017, 2026, 2031, 2034, 2054, 2059)
group by c.name
having count(distinct equipslot) = 2

备注:

  • 在多表查询中使用它所属的表作为每个列的前缀是一个很好的实践;我做了一些假设,您可能需要检查

  • in可以方便地缩短多个or条件
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64407077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档