2009-12-11 3 views
1

Я пытаюсь обновить таблицу 1 некоторым значением поля из таблицы 2 на основе условия. Но я не могу получить правильный запрос. Вот условие:Обновление таблицы с записями из другой таблицы

У меня есть таблица 1 с полем даты, которое должно обновляться из поля даты таблицы 2. Условие состоит в том, что идентификатор таблицы 1 должен быть равен идентификатору таблицы 2 (таблица 2 имеет идентификатор таблицы 1 как FK). Еще одним условием должно быть поле varchar в таблице 2, которое должно иметь определенное значение, например «Test». Везде, где значение поля в таблице 2 является «Тест», я хочу обновить дату этой записи в поле даты таблицы 1. Но есть еще один улов. Вполне возможно, что более 1 записи для того же идентификатора в таблице 2 могут иметь значение как «Test»

Я пытался запрос как:

UPDATE A 
SET A.Date = Max(B.[Date]) 
FROM Table1 A 
INNER JOIN Table2 B ON A.ID = B.FK_ID 
WHERE (B.Changed LIKE 'Test') 
AND A.Date IS NULL 

Но это не работаете, как SQL не позволяет Max в обновлении, когда нет группы. Пожалуйста помоги. Немного срочно.

ответ

2

Вам нужно создать еще внутреннее соединение, где корочки Table1 связаны с максимальными дат Table2 как так:

UPDATE Table1 
SET  Date = BDate.MaxDate 
FROM  Table1 A 
      INNER JOIN Table2 B ON A.ID = b.FK_ID 
      INNER JOIN (
       SELECT A.ID, [MaxDate] = MAX(B.Date) 
       FROM  Table1 A 
         INNER JOIN Table2 B ON A.ID = b.FK_ID 
       GROUP BY A.ID 
     ) BDate ON BDate.ID = A.ID 
WHERE  B.Changed LIKE 'Test' 
      A.Date IS NULL 
1

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

UPDATE Table1 a SET 
    [Date] = (SELECT MAX([Date]) FROM Table2 b WHERE a.ID = b.FK_ID AND b.Changed LIKE 'Test') 
WHERE [Date] IS NULL 
+0

выглядит правильно, но зачем использовать LIKE вместо равных? –

+0

мой первый импульс состоял в том, чтобы отредактировать его на равных, но тогда я понял, что «Тест» был таким явно выраженным значением примера, поэтому я предполагаю, что можно считать прочитанным, что что-то еще на самом деле пойдет туда в реальной реализации этого , и оттуда я только предположил, что Тед знал о различиях между 'LIKE' и' = 'и решил не выбирать, так как это было довольно опасно для вопроса =) –

+0

Прохладные бананы, хотели убедиться, что я был 't пропустили случайное изменение синтаксиса –

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