2015-05-27 4 views
1

Я пытаюсь вставить значение '1' в столбец 'isTransfer' каждого результата подзапроса, но он не работает. Это запрос, где я выбираю строки:Вставить значение в подзапрос

select r.* 
from players r 
inner join ( 
    select name, rating, max(id) id 
    from players group by name, rating 
    having count(distinct club) > 1 
    ) 
q on r.name = q.name and r.rating = q.rating and r.id = q.id 

Это то, что я пытаюсь сделать:

INSERT INTO 'isTransfer' VALUES '1' WHERE 
(select r.* 
    from players r 
    inner join ( 
     select name, rating, max(id) id 
     from players group by name, rating 
     having count(distinct club) > 1 
     ) 
    q on r.name = q.name and r.rating = q.rating and r.id = q.id) 
+1

Я думаю, что вы ищете '' UPDATE' не INSERT' – AdamMc331

ответ

3

Для решения этой задачи, вам нужно сделать запрос UPDATE. Кроме того, вы не можете использовать предложение WHERE так, вы получите сообщение об ошибке. Вместо этого измените предложение where, чтобы посмотреть, где первичный ключ возвращается подзапросом. Это будет выглядеть примерно так:

UPDATE myTable 
SET isTransfer = 1 
WHERE primaryKey IN [mySubquery]; 

Вы должны убедиться, что единственный столбец в вашем SELECT подзапроса является первичным ключом, в противном случае вы получите неверную ошибку подсчета операндов.


В отношении вашего запроса в комментариях JOIN не нужно. Вместо этого, просто получить различные id значения из подзапроса, как это:

SELECT DISTINCT id 
FROM(
    SELECT name, rating, MAX(id) AS id 
    FROM players 
    GROUP BY name, rating 
    HAVING COUNT(DISTINCT club) > 1) q 

Тогда, но этот запрос в качестве IN операнда.

+0

Спасибо за быстрый ответ! Я попробовал это: 'UPDATE players SET isTransfer = 1 WHERE id IN (выберите r.id от игроков r внутреннее соединение (выберите имя, рейтинг, max (id) id из группы игроков по имени, рейтинг, имеющий счет (отличный клуб)> 1) q на r.name = q.name и r.rating = q.rating и r.id = q.id) 'Но в нем говорится:' # 1093 - Вы не можете указать целевые таблицы «игроки» для обновления в FROM clause ' – Mikelo

+1

@Mikelo Я отредактирую свой ответ для вас. – AdamMc331

+1

@Mikelo Untested, но попробуйте отредактировать версию. – AdamMc331

2

Предполагая, что идентификатор уникален в таблице игроков:

update players r inner join 
     (select name, rating, max(id) as id 
     from players p 
     group by name, rating 
     having count(distinct club) > 1 
     ) nr 
     on r.id = nr.id 
    set isTransfer = 1; 
Смежные вопросы