Я пытаюсь обновить значение столбца из другого столбца в одном и том же элементе tabl, но это не с "ERROR 1093 (HY000): вы не можете указать целевую таблица 'tab_1' для обновления в ЕКОМ "обновить столбец с производным значением из другого столбца в mysql
Что я имею в Mysql
DT; date_custom
2012-10-31 17:00:22; 0
2012-09-31 17:00:21; 0
2012-07-31 17:00:25; 0
2012-10-31 17:43:56; 0
2012-11-31 17:44:09; 0
, что мне нужно в соответствующем date_custom поле (столбец)
2012-10-31
2012-09-31
2012-07-31
2012-10-31
2012-11-31
другими словами, я просто хочу Mys ql, чтобы подобрать соответствующую строку для столбца DT и просто DUMP производное значение date_column. Это должно быть одноразовым. У меня есть комбинация ключей, которые однозначно идентифицируют строку, но я не хочу ее использовать, если я могу это идентифицировать.
Вот что я пробовал и не работал.
Before this I created this column - date_custom as below -:
alter table tab_1
add column date_custom int not null;
# simplistic
UPDATE tab_1 SET date_custom = (SELECT SUBSTRING_INDEX(DT," " ,1) FROM tab_1);
Я также знаю, что я не могу изменить столбец в то же время, при попытке получить доступ, что - но так как это разные столбцы, то не должны терпеть неудачу здесь, прямо - или то, что я делать не так?
# using self joins on subquery
UPDATE tab_1
SET tab_1.date_custom =
(
SELECT SUBSTRING_INDEX(a.DT," " ,1)
FROM tab_1 a
INNER JOIN tab_1 b on
a.DT = b.DT and a.AUCTION_ID_64=b.AUCTION_ID_64 # these 2 columns together make up the primary key, but I would like to avoid using this if possible
) # does not work
Это соответствует теме здесь You can't specify target table for update in FROM clause
** Из официальной документации -. «В общем, вы не можете изменять таблицу и выбрать из тех же таблиц в подзапросе, например, относится это ограничение заявлениям следующих форм:»**
DELETE FROM t WHERE ... (SELECT ... FROM t ...);
UPDATE t ... WHERE col = (SELECT ... FROM t ...);
{INSERT|REPLACE} INTO t (SELECT ... FROM t ...);
Exception: The preceding prohibition does not apply if you are using a subquery for the modified table in the FROM clause. Example:
UPDATE t ... WHERE col = (SELECT * FROM (SELECT ... FROM t...) AS _t ...);
Быстрый способ использования, чтобы получить дату, вместо substring_index выберите extract (минута от timestamp '2009-09-09 12:08:43'); , в то же время используя self-соединения и т. д. – ekta