我正在使用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。
但它根本不给我任何东西。
答案 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