powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вложенный запрос.(сложный)
25 сообщений из 69, страница 2 из 3
Вложенный запрос.(сложный)
    #38978414
1=1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
1=1
Гость
tiraelius,

Вообще без from нужно

Update pd join (...) a ...
set pd.desc = a.xz
...
Рейтинг: 0 / 0
Вложенный запрос.(сложный)
    #38978459
tiraelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UPDATE `oc_product_description` pd
inner join oc_product_attribute pa on pd.product_id=pa.product_id and

pd.language_id=pa.language_id
inner join oc_attribute_description ad on pa.attribute_id=ad.attribute_id and

pa.language_id=ad.language_id
inner join oc_product_to_category pc on pc.product_id=pa.product_id1=1,

Я же так и пишу. Или надо по другому?
...
Рейтинг: 0 / 0
Вложенный запрос.(сложный)
    #38978487
tiraelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот так полностью получается

UPDATE oc_product_description pd
inner join oc_product_attribute pa on pd.product_id=pa.product_id and
pd.language_id=pa.language_id
inner join oc_attribute_description ad on pa.attribute_id=ad.attribute_id and

pa.language_id=ad.language_id
inner join oc_product_to_category pc on pc.product_id=pa.product_id

set pd.`description`= concat(
'Вы можете приобрести ', pd.name, ' с гарантией от производителя',
' ', max(case when ad.attribute_id=2 then ad.name end), ' ',
' ', max(case when ad.attribute_id=2 then pa.text end), ' ',
' и ',
' ', max(case when ad.attribute_id=3 then ad.name end), ' ',
' ', max(case when ad.attribute_id=3 then pa.text end), ' ')


where pd.language_id=4
and pa.attribute_id in (2,3)
and pc.category_id = 121
and pa.product_id = 102

1111 ошибка. проблема в concat его нужно переделать я так думаю.
...
Рейтинг: 0 / 0
Вложенный запрос.(сложный)
    #38978760
tiraelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
up
...
Рейтинг: 0 / 0
Вложенный запрос.(сложный)
    #38978925
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
max-агрегатная функция, не полетит
...
Рейтинг: 0 / 0
Вложенный запрос.(сложный)
    #38978947
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. создай запрос для выборки тех записей что требуется заменить
2. создай запрос который извлекает новое значение description у одной записи, т.е. со сссылкой на первичный ключ
3. первый запрос преврати в апдейт, а второй запрос преврати в set description=sql2,
только в sql2 должен ссылаться на первичный ключ sql1
...
Рейтинг: 0 / 0
Вложенный запрос.(сложный)
    #38978978
tiraelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bochkov,

Я несовсем понял. Что имеете под первичным ключём?
Если по пукнтам то получается так
1)

авторselect * from oc_product_description pd
inner join oc_product_to_category pc on pd.product_id=pc.product_id
inner join oc_product_attribute pa on pd.product_id=pa.product_id and pd.language_id=pa.language_id
inner join oc_attribute_description ad on pa.attribute_id=ad.attribute_id and pa.language_id=ad.language_id

where pd.language_id=4
and pa.attribute_id in (2,3)
and pc.category_id=121



2)
авторselect
concat(
'Вы можете приобрести "', pd.name, '" с гарантией от производителя',
' "', max(case when ad.attribute_id=2 then ad.name end), '" ',
' "', max(case when ad.attribute_id=2 then pa.text end), '" ',
' и ',
' "', max(case when ad.attribute_id=3 then ad.name end), '" ',
' "', max(case when ad.attribute_id=3 then pa.text end), '" ')

from oc_product_description pd
inner join oc_product_to_category pc on pd.product_id=pc.product_id
inner join oc_product_attribute pa on pd.product_id=pa.product_id and pd.language_id=pa.language_id
inner join oc_attribute_description ad on pa.attribute_id=ad.attribute_id and pa.language_id=ad.language_id

where pd.language_id=4
and pa.attribute_id in (2,3)
and pc.category_id=121
and pd.product_id = 102


Если их склеивать то получится собственно то что и получалось.
...
Рейтинг: 0 / 0
Вложенный запрос.(сложный)
    #38979042
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 запрос должен вывести одну и только одну запись
где в where должен быть определен первичный ключ таблицы pd
...
Рейтинг: 0 / 0
Вложенный запрос.(сложный)
    #38979068
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
первичный ключ это стобцы в секции primary key таблицы
...
Рейтинг: 0 / 0
Вложенный запрос.(сложный)
    #38979593
tiraelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну так и получается.
в этой таблице примари являются
PRIMARY KEY (`product_id`,`language_id`),
по сути надо тока убрать category id, но смысл от этого не изменится. Выводится 1 запись потому что задана pd.product_id = 102 и pd.language_id=4

select
concat(
'Вы можете приобрести "', pd.name, '" с гарантией от производителя',
' "', max(case when ad.attribute_id=2 then ad.name end), '" ',
' "', max(case when ad.attribute_id=2 then pa.text end), '" ',
' и ',
' "', max(case when ad.attribute_id=3 then ad.name end), '" ',
' "', max(case when ad.attribute_id=3 then pa.text end), '" ')

from oc_product_description pd
inner join oc_product_to_category pc on pd.product_id=pc.product_id
inner join oc_product_attribute pa on pd.product_id=pa.product_id and pd.language_id=pa.language_id
inner join oc_attribute_description ad on pa.attribute_id=ad.attribute_id and pa.language_id=ad.language_id

where pd.language_id=4
and pa.attribute_id in (2,3)
and pd.product_id = 102
...
Рейтинг: 0 / 0
Вложенный запрос.(сложный)
    #38979603
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
UPDATE oc_product_description pd
inner join oc_product_to_category pc on pd.product_id=pc.product_id
inner join oc_product_attribute pa on pd.product_id=pa.product_id and pd.language_id=pa.language_id
SET product_description=(
select
concat(
'Вы можете приобрести "', pd2.name, '" с гарантией от производителя',
' "', max(case when ad2.attribute_id=2 then ad2.name end), '" ',
' "', max(case when ad2.attribute_id=2 then pa2.text end), '" ',
' и ',
' "', max(case when ad2.attribute_id=3 then ad2.name end), '" ',
' "', max(case when ad2.attribute_id=3 then pa2.text end), '" ')

from oc_product_description pd2
inner join oc_product_attribute pa2 on pd2.product_id=pa2.product_id and pd2.language_id=pa2.language_id
inner join oc_attribute_description ad2 on pa2.attribute_id=ad2.attribute_id and pa2.language_id=ad2.language_id

where pd2.language_id=pd.languags_id
and pa2.attribute_id in (2,3)
and pd2.product_id = pd.product_id
)
where pd.language_id=4
and pa.attribute_id in (2,3)
and pc.category_id=121


пишу с планшета так что могу ошибиться
...
Рейтинг: 0 / 0
Вложенный запрос.(сложный)
    #38980013
tiraelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сделал вот так


авторUPDATE oc_product_description pd
inner join oc_product_to_category pc on pd.product_id=pc.product_id
inner join oc_product_attribute pa on pd.product_id=pa.product_id and pd.language_id=pa.language_id
SET product_description=(
select
concat(
'Вы можете приобрести ', pd2.name, ' с гарантией от производителя',
' ', max(case when ad2.attribute_id=2 then ad2.name end), ' ',
' ', max(case when ad2.attribute_id=2 then pa2.text end), ' ',
' и ',
' ', max(case when ad2.attribute_id=3 then ad2.name end), ' ',
' ', max(case when ad2.attribute_id=3 then pa2.text end), ' ')

from oc_product_description pd2
inner join oc_product_attribute pa2 on pd2.product_id=pa2.product_id and pd2.language_id=pa2.language_id
inner join oc_attribute_description ad2 on pa2.attribute_id=ad2.attribute_id and pa2.language_id=ad2.language_id

where pd2.language_id=pd.languags_id
and pa2.attribute_id in (2,3)
and pd2.product_id = pd.product_id
and pd.language_id= 4
and pa.attribute_id in (2,3)
and pc.category_id= 121



Ошибка такая.
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 23

Что может быть?
...
Рейтинг: 0 / 0
Вложенный запрос.(сложный)
    #38980055
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tiraeliusЧто может быть?завершающей скобки нет :)
...
Рейтинг: 0 / 0
Вложенный запрос.(сложный)
    #38980088
tiraelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

какой скобки, где?
...
Рейтинг: 0 / 0
Вложенный запрос.(сложный)
    #38980095
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Завершающей. То есть закрывающей, расположенной в самом конце запроса.
...
Рейтинг: 0 / 0
Вложенный запрос.(сложный)
    #38980100
tiraelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

в phpmyadmin это не требуется он сам доставляет. и в сообщение написано про '' а не про ;
...
Рейтинг: 0 / 0
Вложенный запрос.(сложный)
    #38980116
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tiraeliusи в сообщение написано про '' а не про ;в сообщени и вообще не написано про какой-либо символ
да и сами подумайте, как он может ругаться на скобку (при чём тут точка с запятой, кстати?), если этой скобки в запросе нет?
libastral.dll в стандартный комплект поставки мускля, знаете ли, не входит
tiraeliusв phpmyadmin это не требуется он сам доставляетда неужели?
...
Рейтинг: 0 / 0
Вложенный запрос.(сложный)
    #38980123
tiraelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

Ок я дурак. В упор не вижу, что данная скобка должна закрывать?
...
Рейтинг: 0 / 0
Вложенный запрос.(сложный)
    #38980134
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
UPDATE oc_product_description pd
inner join oc_product_to_category pc on pd.product_id=pc.product_id
inner join oc_product_attribute pa on pd.product_id=pa.product_id and pd.language_id=pa.language_id
SET product_description=( <== открыли раз
select
concat( <== открыли два
 'Вы можете приобрести ', pd2.name, ' с гарантией от производителя',
 ' ', max(case when ad2.attribute_id=2 then ad2.name end), ' ',
 ' ', max(case when ad2.attribute_id=2 then pa2.text end), ' ',
 ' и ',
 ' ', max(case when ad2.attribute_id=3 then ad2.name end), ' ',
 ' ', max(case when ad2.attribute_id=3 then pa2.text end)
 , ' ') <== закрыли два

from oc_product_description pd2
inner join oc_product_attribute pa2 on pd2.product_id=pa2.product_id and pd2.language_id=pa2.language_id
inner join oc_attribute_description ad2 on pa2.attribute_id=ad2.attribute_id and pa2.language_id=ad2.language_id

where pd2.language_id=pd.languags_id
and pa2.attribute_id in (2,3)
and pd2.product_id = pd.product_id
and pd.language_id= 4
and pa.attribute_id in (2,3)
and pc.category_id= 121
 ) <== закрыли раз - этого у вас нет
...
Рейтинг: 0 / 0
Вложенный запрос.(сложный)
    #38980139
tiraelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
действительно.

получился такй запрос

авторUPDATE oc_product_description pd
inner join oc_product_to_category pc on pd.product_id=pc.product_id
inner join oc_product_attribute pa on pd.product_id=pa.product_id and pd.language_id=pa.language_id
SET pd.`description`=(
select
concat(
'Вы можете приобрести ', pd2.name, ' с гарантией от производителя',
' ', max(case when ad2.attribute_id=2 then ad2.name end), ' ',
' ', max(case when ad2.attribute_id=2 then pa2.text end), ' ',
' и ',
' ', max(case when ad2.attribute_id=3 then ad2.name end), ' ',
' ', max(case when ad2.attribute_id=3 then pa2.text end), ' ')

from oc_product_description pd2
inner join oc_product_attribute pa2 on pd2.product_id=pa2.product_id and pd2.language_id=pa2.language_id
inner join oc_attribute_description ad2 on pa2.attribute_id=ad2.attribute_id and pa2.language_id=ad2.language_id

where pd2.language_id=pd.languags_id
and pa2.attribute_id in (2,3)
and pd2.product_id = pd.product_id
and pd.language_id= 4
and pa.attribute_id in (2,3)
and pc.category_id= 121
)


а нашёл ошибку
и заменил SET product_description=( на SET pd.`description`=(

Выскочил такой ахтунг
ERROR 1093 (HY000): You can't specify target table 'pd' for update in FROM clause
...
Рейтинг: 0 / 0
Вложенный запрос.(сложный)
    #38980166
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
оставь как было
закрой скобкой перед where основного запроса
...
Рейтинг: 0 / 0
Вложенный запрос.(сложный)
    #38980176
tiraelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Получается так

авторUPDATE oc_product_description pd
inner join oc_product_to_category pc on pd.product_id=pc.product_id
inner join oc_product_attribute pa on pd.product_id=pa.product_id and pd.language_id=pa.language_id
SET pd.`description`=(
select
concat(
'Вы можете приобрести ', pd2.name, ' с гарантией от производителя',
' ', max(case when ad2.attribute_id=2 then ad2.name end), ' ',
' ', max(case when ad2.attribute_id=2 then pa2.text end), ' ',
' и ',
' ', max(case when ad2.attribute_id=3 then ad2.name end), ' ',
' ', max(case when ad2.attribute_id=3 then pa2.text end), ' ')

from oc_product_description pd2
inner join oc_product_attribute pa2 on pd2.product_id=pa2.product_id and pd2.language_id=pa2.language_id
inner join oc_attribute_description ad2 on pa2.attribute_id=ad2.attribute_id and pa2.language_id=ad2.language_id
)
where pd2.language_id=pd.languags_id
and pa2.attribute_id in (2,3)
and pd2.product_id = pd.product_id
and pd.language_id= 4
and pa.attribute_id in (2,3)
and pc.category_id= 121

ERROR 1093 (HY000): You can't specify target table 'pd' for update in FROM clause

видимо тут не в скобке дело. Мне тут забугорные парни написали
автор
I don't think you can update the join of two tables directly. Select query fetches data from multiple tables which is alright but update will not work like that. "Update" is intended to work on a single table only but you are updating the joins of multiple tables.

Update с inner join работать мол не будет...... а без него возможно как то?
...
Рейтинг: 0 / 0
Вложенный запрос.(сложный)
    #38980177
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bochkov
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
UPDATE oc_product_description pd
inner join oc_product_to_category pc on pd.product_id=pc.product_id
inner join oc_product_attribute pa on pd.product_id=pa.product_id and pd.language_id=pa.language_id
SET product_description=(
select
concat(
'Вы можете приобрести "', pd2.name, '" с гарантией от производителя',
' "', max(case when ad2.attribute_id=2 then ad2.name end), '" ',
' "', max(case when ad2.attribute_id=2 then pa2.text end), '" ',
' и ',
' "', max(case when ad2.attribute_id=3 then ad2.name end), '" ',
' "', max(case when ad2.attribute_id=3 then pa2.text end), '" ')

from oc_product_description pd2
inner join oc_product_attribute pa2 on pd2.product_id=pa2.product_id and pd2.language_id=pa2.language_id
inner join oc_attribute_description ad2 on pa2.attribute_id=ad2.attribute_id and pa2.language_id=ad2.language_id

where pd2.language_id=pd.languags_id
and pa2.attribute_id in (2,3)
and pd2.product_id = pd.product_id
)
where pd.language_id=4
and pa.attribute_id in (2,3)
and pc.category_id=121



вообщето версия была такая
как минимум 2 секции where
...
Рейтинг: 0 / 0
Вложенный запрос.(сложный)
    #38980178
tiraelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ok.
была некоторая ошибка я заменил SET product_description=( на SET pd.`description`=(

в результате получилось

авторUPDATE oc_product_description pd
inner join oc_product_to_category pc on pd.product_id=pc.product_id
inner join oc_product_attribute pa on pd.product_id=pa.product_id and pd.language_id=pa.language_id
SET pd.`description`=(
select
concat(
'Вы можете приобрести ', pd2.name, ' с гарантией от производителя',
' ', max(case when ad2.attribute_id=2 then ad2.name end), ' ',
' ', max(case when ad2.attribute_id=2 then pa2.text end), ' ',
' и ',
' ', max(case when ad2.attribute_id=3 then ad2.name end), ' ',
' ', max(case when ad2.attribute_id=3 then pa2.text end), ' ')

from oc_product_description pd2
inner join oc_product_attribute pa2 on pd2.product_id=pa2.product_id and pd2.language_id=pa2.language_id
inner join oc_attribute_description ad2 on pa2.attribute_id=ad2.attribute_id and pa2.language_id=ad2.language_id

where pd2.language_id=pd.languags_id
and pa2.attribute_id in (2,3)
and pd2.product_id = pd.product_id
)
where
pd.language_id= 4
and pa.attribute_id in (2,3)
and pc.category_id= 121


ERROR 1093 (HY000): You can't specify target table 'pd' for update in FROM clause
...
Рейтинг: 0 / 0
Вложенный запрос.(сложный)
    #38980196
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
видимо в подзапросе нужно убрать упоминание pd2
...
Рейтинг: 0 / 0
25 сообщений из 69, страница 2 из 3
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вложенный запрос.(сложный)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]