如何使用关系师?

时间:2016-04-16 21:07:55

标签: mysql sqlite relational-division

我正在使用SQL创建数据库,现在我想使用关系部门来搜索我想要的东西。在这种情况下,我想知道哪些玩家拥有所有图标。

CREATE TABLE OwnedIcon(PlayerID varchar(10) REFERENCES "Player" ("playerID"), IconID varchar(10) REFERENCES "Icon" ( "IconID"));

insert into OwnedIcon values('p001', 'icon001');
insert into OwnedIcon values('p001', 'icon002');
insert into OwnedIcon values('p001', 'icon003');
insert into OwnedIcon values('p002', 'icon001');
insert into OwnedIcon values('p003', 'icon001');
insert into OwnedIcon values('p003', 'icon002');

然后是Icon

CREATE TABLE Icon(IconID varchar(10) PRIMARY KEY, IconName varchar(15));

的值为:

insert into Icon values('icon001', 'beginner');
insert into Icon values('icon002', 'positive');
insert into Icon values('icon003', 'hunter');

我的想法是:

SELECT * from OwnedIcon, Icon WHERE OwnedIcon.IconID/Icon.IconID;

因此,只有拥有所有图标,才会有结果。所以应该是玩家1。

但它根本不给我任何东西。

2 个答案:

答案 0 :(得分:0)

你的OwnedIcond表引用了两次玩家ID,这不是你想要做的我假设 - 你的第二个参考应该是项目ID。此外,除了找到谁拥有所有图标不是你想要做的,你应该分组玩家和图标,并找到所有与你的数据库中相同数量的图标的玩家。

我在移动设备上,但你想做select * from owned icon, group by player id having count = (select count(*) from icons)

之类的事情

答案 1 :(得分:0)

这可确保您在图标表中至少有一个图标。 玩家可以拥有2个icon001吗?

SELECT * FROM 
  (SELECT PlayerId,
       COUNT(DINSTINCT IconId) as IconOwned,
       IconCount
  FROM OwnedIcon,
    (SELECT GROUP_CONCAT(iconId) as Icons,
            COUNT(iconId) as IconCount
      FROM Icon)T
  WHERE FIND_IN_SET(IconId,T.Icons)
  GROUP BY PlayerId
)T2
WHERE IconOwned >= IconCount

sqlfiddle