Ok I have a temporary MySQL table with 135,000 rows, from this temporary table I want to populate several other tables.
First of all this is the structure of the temporary table
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)
And this is the structure of one of the tables I plan to populate from this.
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;
And this is how I do my insert to the programme table
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 )
This is however taking a very very long time to do, how should I approach this?
Thanks, Paul
Ok thanks guys still having a few issues with this I'm trying the left join example, I've found however that if the table I'm inserting into is empty to begin with though, then it inserts duplicates. Here's a simple example
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");
This inserts the "news" genre into the temporary table twice. Now if I run this SQL command
INSERT INTO GENRE(
GENRENAME)
SELECT
T.GENRENAME
FROM
TEMP T
LEFT JOIN
GENRE G ON G.GENRENAME=T.GENRENAME
WHERE
G.GENRENAME IS NULL;
It inserts "news" twice into the genre table which is wrong. If I run the same command again, it correctly doesn't insert any new rows.