2016-12-08 3 views
0

У меня есть таблица, содержащая родительский столб colunm (у которого нет ограничений, что этот идентификатор не существует, из-за плохих данных !!!). У меня есть две отдельных вещи, которые я хотел бы сделать Добавить немного колонка IsChild - Содержит правда, только если он имеет ParentID и это один на самом деле существует в моей таблице Добавить немного колонки IsParent - Содержит только справедливо, если он ссылается ребенокКак обновить столбец в зависимости от общих строк таблицы

я придумал что-то похожее на:

UPDATE MyTable 
    Set IsParent = 1 
    WHERE Id in (select distinct parentId from MyTable) and IsParent = 0 
UPDATE MyTable 
    Set IsChild = 1 
    WHERE parentId in (select id from MyTable) and IsChild = 0 

Но это довольно медленно !!! Любая идея, как мы можем сделать это быстрее

Bonus Вопрос: MyTable является временной таблицей Если мы сможем обновить все поля сразу, чтобы не создать стольких записей, сколько заявления

+0

добавить индекс к parentId? – TZHX

ответ

1

Вы можете попробовать обновление присоединиться. Это было бы идеально, если бы MyTable имел индексы как на столбцах Id, так и на parentId.

UPDATE t1 
SET IsParent = 1 
FROM MyTable t1 
INNER JOIN MyTable t2 
    ON t1.Id = t2.parentId 
WHERE isParent = 0 

UPDATE t1 
SET IsChild = 1 
FROM MyTable t1 
INNER JOIN MyTable t2 
    ON t1.parentId = t2.Id 
WHERE isChild = 0 
+0

Но есть ли способ сделать это за один проход? – Dave

+0

Вы всегда можете выполнять два обновления в рамках одной транзакции. –

Смежные вопросы