Обновить запрос "обновляемый запрос" - PullRequest
0 голосов
/ 07 декабря 2009

В Access 2003 я пытаюсь взять таблицу и, если какой-либо показатель = 1 для ЛЮБОЙ строки данного идентификатора, сделать все строки = 1 для этого идентификатора

Например, если у нас есть:

ID   Indicator
Jack 0 
Jack 0
Jeff 1
Jeff 0
Mark 1
Mark 1

станет:

ID   Indicator
Jack 0 
Jack 0
Jeff 1
Jeff 1
Mark 1
Mark 1

Поскольку у Джеффа и Марка есть хотя бы 1 строка с индикатором = 1, я хочу сделать ВСЕ их строки = 1.

Пока это моя попытка, но я продолжаю получать сообщение об ошибке «Операция должна использовать обновляемый запрос» (я думаю, потому что оператор select не является таблицей ... вы не можете обновить запрос)

UPDATE Table1 INNER JOIN (SELECT DISTINCT Table1.ID
FROM Table1
WHERE (((Table1.Indicator)=1)))
List ON Table1.ID =List.ID SET Table1.Indicator = 1;

Какой хороший способ сделать это быстро и эффективно без создания временной таблицы ? Или временная таблица будет лучшим / наиболее эффективным решением? Это немного загромождает мою базу данных, так как есть 8 строк, над которыми я должен сделать это ... таблица, на которой я работаю, составляет ~ 300 МБ.

Спасибо

Ответы [ 3 ]

3 голосов
/ 07 декабря 2009

Это один из способов сделать это:

UPDATE T1 SET Indicator = 1 
WHERE Indicator = 0
AND EXISTS (SELECT * FROM T1 AS T2 WHERE T2.Indicator = 1 AND T1.ID = T2.ID)
1 голос
/ 07 декабря 2009

Вы пробовали что-то подобное

UPDATE [Table] SET [Table].[Indicator] = 1, [Table].ID = [ID]
WHERE Exists (SELECT * FROM [Table] t WHERE ID = t.ID and [Table].Indicator = 1);
1 голос
/ 07 декабря 2009

Самое простое решение:

UPDATE TABLE 
   SET indicator = 1
 WHERE id IN ('Jeff', 'Mark') --etc

Если вы хотите обновить только те строки, для которых значение еще не равно 1:

UPDATE TABLE 
   SET indicator = 1
 WHERE id IN ('Jeff', 'Mark')
   AND indicator != 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...