| imho.ws |
![]() |
|
|
|||||||
|
Сообщения:
Перейти к новому /
Последнее
|
Опции темы |
|
|
# 1 |
|
Banned
Регистрация: 11.06.2008
Сообщения: 57
![]() |
Kак переформировать многотабличный SELECT в подобное для UPDATE
Тут у меня возник вопрос, имею следующее...
$sql="SELECT tad.* from tabledata tad, tableback back where tad.settedID=back.settedID and back.Project=303 and tad.field1='on'"; То есть поставляются данные, которые критериям этим соответствуют, твперь мне надо по этим же критериям поиска в таблице tabledata изменить значения field1='' und field2='on', чего то крутил и так и сяк, не получилось, а как правильно, не знаю. То же самое хотелось бы уметь стирать, типа стери те строчки, которые тому же поисковому критерию соответствуют, как указано в примере. Спасибо! |
|
|
|
|
# 2 |
|
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Не "стери" а "сотри".
На счет запросов, на сколько я помню (все больше с MSSQL работаю последнее время, приходится), обновлять за раз можно только одну таблицу, но если обновляемые поля из одной таблицы, то в условиях выборки вполне можно применять JOIN'ы. http://howto.thibeault.cc/2008/02/join-sql-update.html Пишут что и MySQL поддерживает вроде. Ну в крайнем случае всегда остается вариант с подзапросом. Удалять думаю в любом случае лучше подзапросом.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
|
|
|
|
# 4 |
|
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Не поддерживает что именно?? И почему "на самом деле", если я написал что "пишут что поддерживает"?
Уж подзапросы-то точно поддерживаются не слишком старыми версиями. Так что всегда можно сделать это через подзапрос, даже если JOIN не поддерживается в UPDATE.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
|
|
|
|
# 5 |
|
Banned
Регистрация: 11.06.2008
Сообщения: 57
![]() |
Так подзапросы как раз не поддерживает мой сервак, хотя версия mysql 5.0.14, повлиять на это не могу. А вариант по типу
update i set i.feed_id = c.feed_id from invc_item i, calls c where i.feed_id = 0 and c.invc_item_id = i.invc_item_id and c.feed_id > 0 тоже не сработал.. |
|
|
|
|
# 6 | |
|
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
С 5.1 вроде бы подзапросы только.А вот это странно, Multiple-table syntax UPDATE уже поддерживаться должен, судя по офф-документации - http://dev.mysql.com/doc/refman/5.0/en/update.html Какие ошибки были?
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
|
|
|
|
|
# 7 |
|
Banned
Регистрация: 11.06.2008
Сообщения: 57
![]() |
Да, вот сейчас ошибку занотировал по типу multiple table
$sql="update tbldaten set tbldaten.field1='on' where tbldaten.settedID in (SELECT tad.settedID from tbltaetigkeitsdaten tad, tblback back where tad.settedID=back.settedID and back.Project_Nr=300)"; Ошибка You can't specify target table 'tbldaten' for update in FROM clause. |
|
|
|
|
# 8 |
|
::VIP::
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
"позапросами" вы что называете? subqueries, типа вложенных selectов? С 4.1 они поддерживаются, не надо дезинформации.
__________________
"If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all." Michelangelo Buonarroti Последний раз редактировалось Saruman; 08.07.2008 в 18:20. |
|
|
|
|
# 9 |
|
Banned
Регистрация: 11.06.2008
Сообщения: 57
![]() |
Ребята, кажется наконец то получилось
только чуть по другому и не знаю, сделало ли оно то, что мне нужно было, ух, аж страшно стало ![]() В общем так вышло $sql="update tbldaten set field1='on' where settedID in (SELECT settedID from tblback where Project_Nr=300)"; Если не ошибаюсь, этот запрос репрезентирует моё желание, ведь по сути tbldaten.settedID=tblback.settedID равнозначно settedID in(SELECT settedID from tblback) или я не прав? |
|
|
|
|
# 12 |
|
::VIP::
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
в данном update-запросе - равнозначно.
Суть же разницы в том, что старый вариант даёт взаимно однозначное сопоставление рядов обоих таблиц, субселект же в твоей записи просто выбирает ряды из одной таблицы, не ставя им в соответствие ряды второй. В определённых выборках это может быть критично.
__________________
"If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all." Michelangelo Buonarroti |
|
|
|
|
# 13 |
|
Banned
Регистрация: 11.06.2008
Сообщения: 57
![]() |
Ты имеешь ввиду при выбирании с последующим сортированием? Просто без прямого примера тяжело понять, где бы это критично разнилось.
Попробую зачитать с субселектом.. добавлено через 39 минут Странно, но даже при чтении по субзапросом выходит то же самое количество и в том же порядке, как и при чтении в прямом обозначении, значит всё же равнозначно!? |
|
|
|
|
# 14 | ||||
|
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
Цитата:
Viro_man, так тем более тогда с ними не должно быть проблем уж точно. Цитата:
Цитата:
Только не увлекайтесь особо, и главное бездумно - объединения в большинстве случаев намного более производительны.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
||||
|
|
|
|
# 15 | ||
|
Banned
Регистрация: 11.06.2008
Сообщения: 57
![]() |
Цитата:
Цитата:
|
||
|
|
|
|
# 16 |
|
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Так есть же!
Неужели не работает пример из МАНа?? Скажем вот этот: Код:
UPDATE items,month SET items.price=month.price WHERE items.id=month.id;
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
|
|