1

这是我目前拥有的:

存档表(2008-2011 年每年一个)和 2012 年新创建的 4 个表,按季度划分。所有这些表,包括新表,都具有相同的结构和键。这些的命名约定是 ARCHIVE_PLAYS。然后我有一个用于当前数据的“实时”表(称为 PLAYS)。我有一个合并表,它结合了所有表,以便我可以运行报告。我以前没有的问题是这个合并表显示重复。它们具有相同的主键,所以不应该是这种情况,对吧?它必须与我刚刚创建的新表有关,因为我以前没有这个问题。

结构:

**COMPANY**
      COMPANY.MERGED_PLAYS
      COMPANY.ARCHIVE_PLAYS_2008
      COMPANY.ARCHIVE_PLAYS_2009
      COMPANY.ARCHIVE_PLAYS_2010
      COMPANY.ARCHIVE_PLAYS_2011
      COMPANY.ARCHIVE_PLAYS_2012Q1
      COMPANY.ARCHIVE_PLAYS_2012Q2
      COMPANY.ARCHIVE_PLAYS_2012Q3
      COMPANY.ARCHIVE_PLAYS_2012Q4

**COMPANY2**
      COMPANY2.PLAYS

除 Merged_Plays 外,每个表都有以下 Create:

CREATE TABLE `ARCHIVE_PLAYS_2011` (
`ENTRY_ID` BIGINT(20) NOT NULL,
`NODE_ID` VARCHAR(48) NOT NULL,
`HW_ID` VARBINARY(64) NOT NULL,
`LOG_DAY` DATE NOT NULL,
`ROW_NUMBER` INT(11) NOT NULL,
`NODE_NAME` VARCHAR(128) NOT NULL,
`FILE_NAME` VARCHAR(1024) NOT NULL,
`PRESENTATION_NAME` VARCHAR(1024) NULL DEFAULT NULL,
`SMIL_SEQUENCE_ID` VARCHAR(256) NULL DEFAULT NULL,
`SMIL_CONTENT_ID` VARCHAR(256) NULL DEFAULT NULL,
`PLAY_TIME_MS` BIGINT(20) NOT NULL,
`PLAY_TIME` TIME NOT NULL,
`STATUS_CODE` VARCHAR(48) NULL DEFAULT NULL,
`NUM_SCREENS_CONNECTED_AND_ON` INT(11) NULL DEFAULT NULL,
`NUM_SPEAKERS_CONNECTED_AND_ON` INT(11) NULL DEFAULT NULL,
`SCREEN_LAYOUT_MATCHES` CHAR(1) NULL DEFAULT NULL,
`ENTRY_PROCESSED` CHAR(1) NULL DEFAULT NULL,
`FILE_PATH` VARCHAR(1024) NULL DEFAULT NULL,
PRIMARY KEY (`NODE_ID`, `LOG_DAY`, `ROW_NUMBER`),
INDEX `PLAYLOG_ENTRY_ID` (`ENTRY_ID`),
INDEX `PLAYLOG_LOG_DAY` (`LOG_DAY`),
INDEX `PLAYLOG_LOG_DAY_PLAY_TIME` (`LOG_DAY`, `PLAY_TIME`),
INDEX `PLAYLOG_FILE_NAME` (`FILE_NAME`(600)),
INDEX `PLAYLOG_NODE_NAME` (`NODE_NAME`),
INDEX `PLAYLOG_FILE_NAME_NODE_NAME` (`FILE_NAME`(600), `NODE_NAME`),
INDEX `PLAYLOG_ENTRY_ID_PROCESSED` (`ENTRY_ID`, `ENTRY_PROCESSED`)
  )
    COLLATE='latin1_swedish_ci'
    ENGINE=MyISAM;
4

1 回答 1

1

主键仅确保单个表中的唯一数据。您必须有跨多个表的重复记录。确保您已从实时表中删除了所有 2012 年的数据。确保任何四分之一桌之间没有重复。

此外,如果记录是 100% 重复,如果您在所有表之间执行 UNION(而不是 UNION ALL),您将获得唯一的结果,但这会降低查询性能。

于 2013-01-08T18:33:07.697 回答