Хорошо, у меня есть временная таблица MySQL с 135 000 строк, из этой временной таблицы я хочу заполнить несколько других таблиц.
Прежде всего, это структура временной таблицы
CREATE TEMPORARY TABLE TVTEMPTABLE (
PROGTITLE TEXT, SUBTITLE TEXT,
EPISODE TEXT, YR YEAR, DIRECTOR TEXT,
PERFORMERS TEXT, PREMIERE BOOL, FILM BOOL, RPEAT BOOL,
SUBTITLES BOOL, WIDESCREEN BOOL, NEWSERIES BOOL, DEAFSIGNED BOOL,
BNW BOOL, STARRATING TINYINT, CERTIFICATE VARCHAR(5), GENRE VARCHAR(50),
DESCRIPTION TEXT, CHOICE BOOL, PROGDATE DATE, STARTIME TIME, ENDTIME TIME,
DURATION INT, CHANNELID INT NOT NULL)
И это структура одной из таблиц, которые я планирую заполнить из этого.
CREATE TABLE PROGRAMME (
PROGRAMMEID INT NOT NULL AUTO_INCREMENT, GENREID INT NOT NULL, PROGTITLE VARCHAR(50), YR YEAR, DIRECTOR VARCHAR(50), PERFORMERS TEXT, FILM BOOL, WIDESCREEN BOOL, BNW BOOL, CERTIFICATE VARCHAR(5), DESCRIPTION TEXT, PRIMARY KEY(PROGRAMMEID), INDEX (GENREID), FOREIGN KEY (GENREID) REFERENCES GENRE(GENREID)
) ENGINE=INNODB;
И вот как я делаю свою вставку втаблица программ
INSERT INTO PROGRAMME (
GENREID, PROGTITLE, YR, DIRECTOR, PERFORMERS, FILM, WIDESCREEN, BNW, CERTIFICATE, DESCRIPTION) SELECT G.GENREID, T.PROGTITLE, T.YR, T.DIRECTOR, T.PERFORMERS, T.FILM, T.WIDESCREEN, T.BNW, T.CERTIFICATE, T.DESCRIPTION FROM TVTEMPTABLE T,GENRE G WHERE G.GENRENAME = T.GENRE AND NOT EXISTS (
SELECT * FROM PROGRAMME P WHERE P.PROGTITLE = T.PROGTITLE )
Однако, как это сделать, занимает очень много времени?
Спасибо, Пол
Хорошо, спасибо, ребята, у которых все еще есть несколько проблем с этим. Я пробую левый пример соединения, однако я обнаружил, что если таблица, в которую я вставляю, пуста для начала, тогда она вставляет дубликаты.Вот простой пример
CREATE TEMPORARY TABLE TEMP(
GENRENAME TEXT);
CREATE TABLE GENRE(
GENREID INT NOT NULL AUTO_INCREMENT,
GENRENAME TEXT, PRIMARY KEY(GENREID)
) ENGINE=INNODB;
INSERT INTO TEMP(
GENRENAME)
VALUES("news");
INSERT INTO TEMP(
GENRENAME)
VALUES("news");
. Он дважды вставляет жанр "новости" во временную таблицу.Теперь, если я запускаю эту команду SQL
INSERT INTO GENRE(
GENRENAME)
SELECT
T.GENRENAME
FROM
TEMP T
LEFT JOIN
GENRE G ON G.GENRENAME=T.GENRENAME
WHERE
G.GENRENAME IS NULL;
, она вставляет «новости» дважды в таблицу жанров, что неверно.Если я снова выполню ту же команду, она не вставит новые строки.