Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Update в MySQL. Помогите плиз!!!

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных
Предыдущая тема :: Следующая тема  
Автор Сообщение
Erbol
Гость





СообщениеДобавлено: Чт Сен 30 2004 05:02    Заголовок сообщения: Update в MySQL. Помогите плиз!!! Ответить с цитатой

Имеется 3 базы, a (собственно главная таблица), c (справчник), t (данные загруженные из txt).
Таблица a имеет поле spr_id (id из справочника )
Таблицы a и t имеют одинаковое поле id.
Таблица t также имеет поле name одинаковое с полем name таблицы c.
Задача обновить поле spr_id в таблице a, связав с таблицей t по полю id, а таблицу t связав со справочником с по полю name.
Помогите чайнику, не могу проапдейтиить, поскольку мускул версия 3 насколько я понял не поддерживает вложенные в update подзапросы.
updtae a set spr_id= ???
Можно ли это сделать одним запросом и как? А если несколькими тоже не могу понять. Со вчерашнего дня мучаюсь и не могу ничего придумать...
Вернуться к началу
Scaramouch



Зарегистрирован: 11.01.2004
Сообщения: 143
Откуда: Столица нашей Родины

СообщениеДобавлено: Чт Сен 30 2004 08:23    Заголовок сообщения: Ответить с цитатой

1.Может ты лучше напишешь целиком структуру таблиц, а то я, например, ничего не понял и не собираюсь понимать из твоих путанных объяснений.
Не бойся, мы потерпимSmile напиши:
CREATE table `a`(...; CREATE TABLE `c`(... и т.д.
2.
Цитата:
мускул версия 3 насколько я понял не поддерживает вложенные в update подзапросы

Тебе нужны не вложенные подзапросы, а множественный UPDATE, как я понял. Но не беспокойся, его тоже нет в третьем мускуле Smile
3.Не понимаю, зачем тебе изменять spr_id - я так понял, что это внешний ключ - если так, то скорее всего, у тебя неправильная постановка задачи.
Знаешь, будет намного лучше, если ты вкратце опишешь, что ты хочешь сделать.
То есть напиши не "как составить запрос", а "как лучше в моем случае перенести данные из дампа в базу", ну или то что ты действительно хочешь сделать.

Цитата:
Помогите чайнику

Всегда пожалуйста Smile
_________________
Ноги - это две лишние руки.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Erbol
Гость





СообщениеДобавлено: Чт Сен 30 2004 11:45    Заголовок сообщения: А я и не боюсь. %-)) Ответить с цитатой

В общем так: три таблицы.
Я пытался сделать так
update a set a.spr_id = c.id
where a.id=t.id and t.name=c.name
Но из этого ничего не выходит.
Спасибо что откликнулся.
Вернуться к началу
Гость






СообщениеДобавлено: Чт Сен 30 2004 12:57    Заголовок сообщения: Ответить с цитатой

На вопросы ты, я как вижу, отвечать не хочешь.
Цитата:
update a set a.spr_id = c.id
where a.id=t.id and t.name=c.name

Естесственно, не работает, так как у тебя указана только таблица а:
update A

Так что он понятия не имеет, что такое c.id, t.id, t.name, c.name

Но еще раз повторяю: на твои вопросы я отвечать не буду, пока ты не ответишь на мои.
Может здесь и найдется альтруист, который будет разбираться в твоей проблеме, не имея понятия о том, что ты действительно хочешь и что у тебя есть, но я сильно сомневаюсь
Вернуться к началу
Scaramouch



Зарегистрирован: 11.01.2004
Сообщения: 143
Откуда: Столица нашей Родины

СообщениеДобавлено: Чт Сен 30 2004 13:02    Заголовок сообщения: Ответить с цитатой

предыдущее сообщение - мое Smile
_________________
Ноги - это две лишние руки.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
erbol
Гость





СообщениеДобавлено: Чт Сен 30 2004 14:08    Заголовок сообщения: Ответ Ответить с цитатой

Лень как говорится корень зла. ^-))
Так вот: имеется три таблицы a (основная), c (справочник), t (временная загруженная из текстовика).
Структура табл. А
id (int), spr_id (int)
1 null
2 null
3 null

Структра табл. С
id (int), name (varchar)
1 казахстан
2 россия
3 германия

Структура табл. Т
id (int), name (varchar)
1 казахстан
2 россия
3 германия

Думаю понятно, связать нужно все 3 таблицы. Запихать в А поле ID справочника, связывая с таблицей Т обе таблы.

Ну вот вроде и все написал. Может теперь разберемся? как думаешь?
Вернуться к началу
Scaramouch



Зарегистрирован: 11.01.2004
Сообщения: 143
Откуда: Столица нашей Родины

СообщениеДобавлено: Чт Сен 30 2004 15:05    Заголовок сообщения: Ответить с цитатой

Не нравится мне твоя структура таблицSmile
Неправильно все это....
Ну да ладно.
Если воспользоваться средствами пхп, перла или, на чем ты там пишешь, религия не позволяет, то, учитывая возможности(вернее их отсутствие Smile ) третьего мускула, делается, скорее всего, через временную таблицу.
Примерно так:

Выбираешь нужные тебе в таблице А данные
Код:
CREATE TEMPORARY TABLE Tmp SELECT a.id AS id, c.id AS spr_id FROM a LEFT JOIN t ON a.id=t.id LEFT JOIN с ON t.name=c.name


А потом заменяешь значения в таблице а значениями в твоей временной таблице
Код:
REPLACE a SELECT * FROM Tmp


Вуаля Smile

А вообще, почитай маны: http://dev.mysql.com/doc/mysql/ru/Reference.html

А также статью здесь на цитфоруме о проектировании БД, а то что-то у тебя здесь не такSmile
А объяснить зачем тебе все это ты так и не удосужился
_________________
Ноги - это две лишние руки.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Erbol
Гость





СообщениеДобавлено: Чт Сен 30 2004 15:40    Заголовок сообщения: Ответить с цитатой

Окей, большое спасибо, попробую.
А объяснить я не могу, а то бы объяснил.
Вернуться к началу
Scaramouch



Зарегистрирован: 11.01.2004
Сообщения: 143
Откуда: Столица нашей Родины

СообщениеДобавлено: Чт Сен 30 2004 15:45    Заголовок сообщения: Ответить с цитатой

Цитата:
А объяснить я не могу, а то бы объяснил.


Пожалей, я сейчас умру со смеху Very Happy Very Happy Very Happy
Спасибо, а то устал уже работать, а тут такое развлечение Very Happy
_________________
Ноги - это две лишние руки.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Scaramouch



Зарегистрирован: 11.01.2004
Сообщения: 143
Откуда: Столица нашей Родины

СообщениеДобавлено: Чт Сен 30 2004 17:03    Заголовок сообщения: Ответить с цитатой

Виноват Smile
replace INTO ....
_________________
Ноги - это две лишние руки.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Гость






СообщениеДобавлено: Пт Окт 01 2004 05:44    Заголовок сообщения: Ответить с цитатой

Smile))
Да я рад что смог тебя развеселить.
А насчет структуры таблиц,
Таблицы очень большие временная таблица содержит до 80 полей.
главная таблица около 10
Строк правда пока немнго около 30 К (хотя в будущем будет больше)
Это разработка на начальной стадии пока.
и справочников на самом деле с 10
Так что мне нужно было понять технологию, смысл. механику.
А остальное дело рук.

Ну ладно еще раз спасибо, скоморох (извини если неправильно назвал тебя).
Очень рад что ты помог. Надеюсь это наша не последняя встреча.
Вернуться к началу
Гость






СообщениеДобавлено: Пн Окт 18 2004 17:39    Заголовок сообщения: Ответить с цитатой

tesxt
Код:
c
xcxc
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...