SQL查询设计帮助:在多个表中查找重复项排除

时间:2013-11-28 01:05:11

标签: mysql sql database

我正在尝试设计一个查询,根据几个字段从两个表中获取重复记录。我已经设置了到目前为止我所做的事情:http://sqlfiddle.com/#!2/e36c8d/1/0

某些背景信息:

1)下面列出的这两个表格列出了玩家玩游戏的“项目”。物品来自怪物/玩家交易。

2)游戏中的玩家由他们的CharID识别

3)项目主要由以下唯一字段定义:Name,ItemID,ID1,ID2,ID3。

4)每个项目还有其他属性,但这些属性可以根据玩家的行为进行更改(例如,更改项目的颜色;移动它的位置,升级它)。

5)存储项目的表有两个:ITEM和BANKITEM。 Item = bag; Bankitem =仓库。

在某些情况下,玩家可以(意外或有意)复制单个项目,然后将这些项目交易给其他玩家或使用其他角色。

需求(满足所有3种需求非常重要):

1)我需要查询同时扫描两个表,以识别具有重复Name,ItemID,ID1,ID2,ID3的项目,然后我可以进一步调查(并删除其中一个重复项)。

2)我需要查询根据名称排除某些项目(例如,RedPotions都具有相同的名称,ItemID,ID1,ID2和ID3。这些是常见项目,重复是好的...我不知道需要将它们包含在列表中,因为它们不是稀有/高价值物品。)

3)我需要查询来排除NULL 的CharID(这是我遇到真正困难的地方,因为CharID不是我的SELECT语句的一部分,它不能是因为它完全有可能是两个不同的CharID具有相同的重复稀有项目。)

SQL FIDDLE:

如果查询工作正常,结果应显示:

  • 2个重复的ChainHose(M),包含以下常见字段:ChainHose(M),100,17089,22452,-12225

  • CharID为'0'的ChainHose(M)将从列表中排除。请注意,表中的实际字段为NULL而不是“0”。 (我是SQL / SQL Fiddle的新手,并且不确定如何在SQL Fiddle中将其设置为'NULL'以用于示例目的。

  • 2重复的Hauberk(W)具有以下常见字段:Hauberk(W),200,12369,15252,95682。颜色和寿命不同并不重要(具有副本的玩家可以拥有在获得重复的物品后染成了盔甲。通过使用可以减少寿命。

有没有人有任何建议?我以前没有决心问过类似的问题(见Advanced SQL Query Design Help (Duplicates across two tables, multiple fields, possible exclusions based on one field))。这个人建议我更具体,并使用SQL Fiddle,所以我这样做是希望我可以正常工作。

提前致谢。

1 个答案:

答案 0 :(得分:0)

这是你需要的吗?

SQL Fiddle

SELECT *
from bankitem
where exists(
  SELECT Name, ItemID, ID1, ID2, ID3
  from item
  where bankitem.Name = item.Name
  and bankitem.ItemID = item.ItemID
  and bankitem.ID1 = item.ID1
  and bankitem.ID2 = item.ID2
  and bankitem.ID3 = item.ID3
)
and name not in('RedPotion')
and charid <> 0