0

我有 2 张桌子:玩家和物品。现在我正在寻找具有已知属性的物品的玩家。

SELECT players.`name` FROM `players`
INNER JOIN `items` ON players.`id`=items.`ownerId` 
WHERE items.`itemType` = 1 AND items.`itemClass` = 2 AND items.`itemColor` = 3

我怎样才能找到拥有不止一件我想要的物品的播放器?甚至可以在一个查询中进行?

前任。我想找到同时拥有这两个项目的玩家: type=1 class=2 color=3 , type=2 class=3 color=4

我知道如何在多个查询中执行此操作:只需在每个下一个查询中添加 player.id IN (...) 即可。

感谢你的帮助!

4

1 回答 1

0

最好的方法是聚合。

select i.ownerId
from Items i
group by i.ownerId
having max(case when i.itemType = 1 and i.itemClass = 2 and i.itemColor = 3
                then 1 else 0
           end) = 1 and
       max(case when i.itemType = 2 and i.itemClass = 3 and i.itemColor = 4
                then 1 else 0
           end) = 1

如果您想了解有关所有者的其他信息,则需要加入玩家表。

having在 MySQL 中,您可以将子句简化为:

having max(i.itemType = 1 and i.itemClass = 2 and i.itemColor = 3) = 1 and
       max(i.itemType = 2 and i.itemClass = 3 and i.itemColor = 4) = 1
于 2013-01-27T18:52:15.350 回答