2013-01-08 144 views
1

這是我目前有:MySQL的合併表複製

存檔表(一年一個,2008-2011)和4頁新創建於2012年的表分爲宿舍。所有這些表格,包括新的表格,都有相同的結構和鍵。這些命名約定是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 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; 
+2

很難說沒有看到DDL並知道如何將數據傳輸到歸檔表以及如何管理主鍵。主鍵只能保證在表格中唯一。 –

+0

我從前面的一個歸檔表中創建表代碼來創建每個表。然後,我從PLAYS做了INSERT語句,並使用BETWEEN獲得本季度的日期。 – Patrick

回答

1

主鍵僅單個表內保證唯一的數據。您必須在多個表中有重複的記錄。確保您已從活動表格中刪除了所有2012年的數據。確保任何四分之一桌之間沒有任何差異。

此外,如果記錄是100%dups,如果您在所有表(而不是UNION ALL)之間執行了聯合,您將獲得唯一結果,但這會降低查詢性能。

+0

謝謝。當然,這個想法是從實時表中刪除2012年,但我不想這樣做,直到我確信所有數據都已備份並存檔。 – Patrick

+0

如果您尚未從活動表格中移除2012年的數據,那麼可以解釋您爲什麼會出現這種情況。 2012季度表中的所有數據是不是也在活動表中? – Tom

+0

正確。我對MySQL比較陌生,當我從這裏開始時,我繼承了所有這些表格。我之前的印象是,我不會有這些蠢事,因爲有一個原始的2012年1 - 7月份的存檔表,當我在幾個月前對它進行查詢時,沒有它們。我想這在結構上是不同的,或者合併表並沒有包含它。 – Patrick