Поскольку новые записи добавляются в таблицу, мне нужно отметить старые записи для этого уровня, как старые. Я могу сделать это с помощью NOT IN, но NOT EXISTS не работает. Я подозреваю, что это связано с корреляцией подзапросов, как описано здесь: NOT EXISTS query doesn't work on Informix while same query with NOT IN works , но я не понимаю, почему & может использовать дополнительные пояснения. Вот пример кода:T-SQL NOT IN работает, но NOT EXISTS не
CREATE TABLE t2 (id INT, level INT, someDate datetime, mostRecent int)
GO
INSERT INTO t2
SELECT 1, 1, '1/1/2010', 1 UNION ALL
SELECT 2, 1, '2/2/2010', 1 UNION ALL
SELECT 3, 2, '3/3/2010', 1 UNION ALL
SELECT 4, 3, '4/4/2010', 1 UNION ALL
SELECT 5, 3, '5/5/2010', 1 UNION ALL
SELECT 6, 3, '6/6/2010', 1 UNION ALL
SELECT 7, 4, '7/7/2010', 1 UNION ALL
SELECT 8, 5, '8/8/2010', 1 UNION ALL
SELECT 9, 6, '9/9/2010', 1 UNION ALL
SELECT 10, 6, '10/10/2010', 1 UNION ALL
SELECT 11, 8, '11/11/2012', 1
GO
-- this doesn't work
UPDATE t2 SET mostRecent = 0
FROM t2
WHERE NOT EXISTS
(SELECT * FROM t2
JOIN
(SELECT level, max(someDate) as someDate FROM t2 group by level) as maxrows
ON t2.someDate = maxrows.someDate)
GO
-- this works
UPDATE t2 SET mostRecent = 0
FROM t2
WHERE id NOT IN
(SELECT t2.id FROM t2
JOIN
(SELECT level, max(someDate) as someDate FROM t2 group by level) as maxrows
ON t2.someDate = maxrows.someDate)
Похоже некорректного обновления для меня. Если у вас были SELECT 2, 1, '' 4/4/2010 '', 1 UNION ALL, тогда он нашел бы ID 4 также – Paparazzi