У меня есть таблица, и я хочу обновить все ID = 2 до ID = 1, при условии, что даты разные, потому что есть ограничение на столбец Date
, он должен быть уникальным.
Я использую этот код, но не знаю, как обновить его с таким ограничением.
update table
set ID = 1
where ID = 2
Есть ли способ сгруппировать по этим датам, и если счетчик (дата)> 1, не обновлять таблицу?
Я ожидаю этот вывод:
2 ответа
Вы можете добавить условие NOT EXISTS
, чтобы исключить из обновления те строки, дата которых существует с ID = 1.
update T1
set T1.ID = 1
From MyTable T1
where T1.ID = 2
AND Not Exists (Select 1 from MyTable T2 Where T2.Id = 1 and T2.Date = T1.Date)
Как насчет использования соединения
CREATE TABLE T
(
ID INT,
[Date] DATE,
Amt INT
);
INSERT INTO T VALUES
(1, '2018-07-17', 450),
(1, '2018-07-18', 500),
(1, '2018-07-19', 600),
(2, '2018-07-17', 850),
(2, '2018-07-18', 950),
(2, '2018-07-19', 900),
(2, '2018-07-20', 380),
(2, '2018-07-21', 920);
UPDATE T1
SET T1.ID = 1
FROM T T1 INNER JOIN
(
SELECT MAX(ID) ID, [Date]
FROM T
GROUP BY [Date]
HAVING COUNT([Date]) = 1
) T2 ON T1.[Date] = T2.[Date]
WHERE T1.ID = 2;
SELECT *
FROM T;
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.