Есть ли способ, чтобы написать запрос в лучшую сторону, чем это, если я хочу, чтобы вставить postid
из posts
таблицы в star_ratings
таблицы, если postid
не существует в star_ratings
таблице.
INSERT INTO star_ratings(post_id)
SELECT postid FROM posts
WHERE type in ('D', 'B')
AND postid NOT IN (SELECT post_id FROM star_ratings)
ORDER BY postid ASC
Вы можете попробовать использовать левое соединение тоже
INSERT INTO star_ratings(post_id)
SELECT postid FROM posts left join star_ratings on posts.postid=star_ratings.post_id
WHERE type in ('D', 'B') and star_ratings.post_id is null
JOIN
лучшим решением по сравнению с no joins?
Следующий запрос EXISTS
может работать немного лучше, чем у вас:
INSERT INTO star_ratings (post_id)
SELECT p.postid
FROM posts p
WHERE
p.type IN ('D', 'B') AND
NOT EXSITS (SELECT 1 FROM star_ratings s WHERE p.post_id = s.post_id);
1
стоит в NOT EXSITS (SELECT 1 FROM star_ratings s WHERE p.post_id = s.post_id);
1
в качестве произвольного значения. На самом деле, EXISTS
проверяет существование записи, и не имеет значения, что вы выбираете. Это, как говорится, не выбрав post_id
может немного улучшить производительность.