Подтвердить что ты не робот

Дублировать строку в SQL?

OK У меня есть таблица с двумя столбцами, идентификатором пользователя и идентификатором курса. Он используется для назначения учебных курсов для пользователя. Это выглядит так:

userid   courseid
0          1
0          3
0          6
1          1
1          4
1          5

поэтому пользователь 0 назначается курсам 1,3,6, а пользователю 1 назначается 1, 4 5

В любом случае мне нужно принять каждого пользователя, которому назначено значение 6, и создать новую строку с этим идентификатором пользователя и курсором 11, в основном назначая каждому пользователю, которому в настоящее время назначено 6, также назначено 11

по какой-то причине (я не создал эту базу данных) обе строки помечены как первичные ключи, а некоторые из утверждений, которые я пробовал, вызывают ошибку из-за этого, что это за сделка?

О, возможно, это потому, что есть несколько пользователей, которые уже назначены на 11, так что это задыхается на тех, может быть?

пожалуйста, помогите

4b9b3361

Ответ 1

Insert Into TableName (userID, courseID)
  Select userID, 11 From TableName Where courseID=6;

Кроме того, я немного смущен вашим комментарием, что оба являются первичными ключами. Обе строки могут быть частью первичного ключа, или оба могут быть уникальными, но оба они не могут быть первичным ключом. Что касается ошибок, вероятно, потому, что запрос попытался вставить строки, которые были дубликатами уже существующих строк. Чтобы устранить эту возможность, вы можете сделать это:

Insert Into TableName (userID, courseID)
  Select userID, 11 From TableName Where courseID=6 
     AND (userID not in (Select userID From TableName Where courseID=11))

В зависимости от вашей базы данных это тоже может работать:

INSERT OR IGNORE INTO TableName (userID, courseID)
    SELECT userID, 11 FROM TableName WHERE courseID=6;

В любом случае, вы идете.

Ответ 2

insert into TableName (userId, courseId)
    select userId, 11
    from   TableName
    where  courseId = 6
    and    not exists (
               select 1
               from   TableName nested
               where  nested.userId = TableName.UserId
               and    nested.courseId = 11
           )

Выбирает всех пользователей, назначенных для курса курса 6, но еще не назначенных для курса я и 11 и вставляет новую запись в таблицу для них для курса 11.

Ответ 3

Это должно помочь:

INSERT
INTO   [table]
       (
              userid,
              courseid
       )
SELECT userid,
       11
FROM   [table]
WHERE  courseid    = 6
   AND userid NOT IN
                     (SELECT userid
                     FROM    [table]
                     WHERE   courseid = 11
                     );

Это выберет всех пользователей в курсе 6 не в курсе 11 и добавит их с курсом 11 в таблицу.