Нубский вопрос про MySql

bav46

update qs_Goods as gi
inner join
(
select g.GoodId
from qs_Goods g
left join qs_Goods cg on cg.ParentGoodId=g.GoodId and cg.IsDeleted=0
group by g.GoodId
having count(cg.GoodId)=0
) as gids on gids.GoodId=gi.GoodId
set gi.IsHasChildren=0
ничго не апдейтит
хотя подзапрос
select g.GoodId
from qs_Goods g
left join qs_Goods cg on cg.ParentGoodId=g.GoodId and cg.IsDeleted=0
group by g.GoodId
having count(cg.GoodId)=0
не пустые значения дает в чем факап ?

lipa

ничго не апдейтит
не апдейтит в смысле affected rows = 0
или результат
 select * from qs_Goods as gi
inner join
(
select g.GoodId
from qs_Goods g
left join qs_Goods cg on cg.ParentGoodId=g.GoodId and cg.IsDeleted=0
group by g.GoodId
having count(cg.GoodId)=0
) as gids on gids.GoodId=gi.GoodId
where gi.IsHasChildren!=0

остается непустым?

SergeRRRRRR

Вроде в мускуле нельзя джоинить селекты. Только таблицы, но могу ошибаться.

bav46

не апдейтит в смысле affected rows = 0
ага оно самое
запихнул по финалу селект внутренний во временную таблицу и сделал апдейт на where in select from tmp
все зааффектилось, причем на стековерфлоу пишут что на селект внутренний при апдейте агрегирующую функцию можно но там без having расматривается

bav46

Вроде в мускуле нельзя джоинить селекты. Только таблицы, но могу ошибаться.
синтаксис при этом валидный и запрос проходит.
причем я having выкинул и попробовал count(*) as cnt
и на сабселект вынес во where gids.cnt=0 тажа петрушка, чето какое-то недопонимание у меня похоже как это должно работать

lipa

Может просто все IsHasChildren уже =0 ? Если новое и старое значения совпадают, то строка не считается affected

bav46

хмм. не по условиям не проходило. ибо там где 0 должен был стать 1 оставалась специально смотрел
там же set он должен влюбом случае перетереть на update
если скажем есть табличка t1 (a char(1
в ней 100 записей '1','1','1', ... (100 единиц) и если сделать update t1 set a='1' то он 100 заафектит.

lipa

100 записей '1','1','1', ... (100 единиц) и если сделать update t1 set a='1' то он 100 заафектит.
Вот и нет

hprt

а не проще было сделать where not exists (...)

hprt

чо, правда? (я правда не знаю, как в мускуле)

lipa


For UPDATE statements, the affected-rows value by default is the number of rows actually changed. If you specify the CLIENT_FOUND_ROWS flag to mysql_real_connect when connecting to mysqld, the affected-rows value is the number of rows “found”; that is, matched by the WRE clause.
Оставить комментарий
Имя или ник:
Комментарий: