MySQL вставляет запись в одну таблицу в другую, если postid не существует

0

Есть ли способ, чтобы написать запрос в лучшую сторону, чем это, если я хочу, чтобы вставить 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
  • 1
    Ваш запрос выглядит именно так, как и должно :)
  • 0
    ОК, круто. Большое спасибо.
Теги:

2 ответа

0

Вы можете попробовать использовать левое соединение тоже

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
  • 0
    Я хотел бы знать, является ли JOIN лучшим решением по сравнению с no joins?
0

Следующий запрос 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);
  • 0
    Большое спасибо. Можете ли вы объяснить мне, что такое 1 стоит в NOT EXSITS (SELECT 1 FROM star_ratings s WHERE p.post_id = s.post_id);
  • 1
    Я выбираю 1 в качестве произвольного значения. На самом деле, EXISTS проверяет существование записи, и не имеет значения, что вы выбираете. Это, как говорится, не выбрав post_id может немного улучшить производительность.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню