SQL - 查询多个卡组中是否存在相同的卡

时间:2018-04-13 17:10:13

标签: sql

鉴于下面的架构,我如何在不更改基础数据的情况下查询多个平台中是否有多少同一个角色卡?

CREATE TABLE 'deck' (
  'deckId' BIGINT(20) NOT NULL AUTO_INCREMENT,
  'title' TEXT(255) NOT NULL,
  PRIMARY KEY ('deckId')
);

CREATE TABLE 'character' (
  'characterId' BIGINT(20) NOT NULL AUTO_INCREMENT,
  'name' VARCHAR(255) NOT NULL,
  PRIMARY KEY ('userId')
);

CREATE TABLE 'card' (
  'cardId' BIGINT(20) NOT NULL AUTO_INCREMENT,
  'color' VARCHAR(255) NOT NULL,
  'characterId' BIGINT(20) NOT NULL,
  'deckId' BIGINT(20) NOT NULL,
  PRIMARY KEY ('cardId'),
  CONSTRAINT 'FK_card_character'
  FOREIGN KEY ('characterId')
  REFERENCES 'character' ('characterId'),
  CONSTRAINT 'FK_card_deck'
  FOREIGN KEY ('deckId')
  REFERENCES 'deck' ('deckId')
);

1 个答案:

答案 0 :(得分:1)

好消息是这是一个正确规范化的架构。因此,这里提出的问题经常涉及糟糕的数据库设计。

基本上你需要GROUP BY,然后使用HAVING子句。这里的JOIN只是化妆品,所以你可以获得角色名称,但通常这是人们想要的东西。当您对这种类型的查询感到满意时,您可能只想从基础表开始,在您的情况下就是卡。

SELECT ch.characterId, ch.name, count(*) as countOf
FROM card ca
JOIN character ch ON ch.characterId = ca.characterId
GROUP BY ca.characterId
HAVING COUNT(*) > 1