Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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.Может ты лучше напишешь целиком структуру таблиц, а то я, например, ничего не понял и не собираюсь понимать из твоих путанных объяснений.
Не бойся, мы потерпим напиши:
CREATE table `a`(...; CREATE TABLE `c`(... и т.д.
2.
Цитата: | мускул версия 3 насколько я понял не поддерживает вложенные в update подзапросы |
Тебе нужны не вложенные подзапросы, а множественный UPDATE, как я понял. Но не беспокойся, его тоже нет в третьем мускуле
3.Не понимаю, зачем тебе изменять spr_id - я так понял, что это внешний ключ - если так, то скорее всего, у тебя неправильная постановка задачи.
Знаешь, будет намного лучше, если ты вкратце опишешь, что ты хочешь сделать.
То есть напиши не "как составить запрос", а "как лучше в моем случае перенести данные из дампа в базу", ну или то что ты действительно хочешь сделать.
Всегда пожалуйста _________________ Ноги - это две лишние руки. |
|
Вернуться к началу |
|
|
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 Заголовок сообщения: |
|
|
предыдущее сообщение - мое _________________ Ноги - это две лишние руки. |
|
Вернуться к началу |
|
|
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 Заголовок сообщения: |
|
|
Не нравится мне твоя структура таблиц
Неправильно все это....
Ну да ладно.
Если воспользоваться средствами пхп, перла или, на чем ты там пишешь, религия не позволяет, то, учитывая возможности(вернее их отсутствие ) третьего мускула, делается, скорее всего, через временную таблицу.
Примерно так:
Выбираешь нужные тебе в таблице А данные
Код: | 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 |
Вуаля
А вообще, почитай маны: http://dev.mysql.com/doc/mysql/ru/Reference.html
А также статью здесь на цитфоруме о проектировании БД, а то что-то у тебя здесь не так
А объяснить зачем тебе все это ты так и не удосужился _________________ Ноги - это две лишние руки. |
|
Вернуться к началу |
|
|
Erbol Гость
|
Добавлено: Чт Сен 30 2004 15:40 Заголовок сообщения: |
|
|
Окей, большое спасибо, попробую.
А объяснить я не могу, а то бы объяснил. |
|
Вернуться к началу |
|
|
Scaramouch
Зарегистрирован: 11.01.2004 Сообщения: 143 Откуда: Столица нашей Родины
|
Добавлено: Чт Сен 30 2004 15:45 Заголовок сообщения: |
|
|
Цитата: | А объяснить я не могу, а то бы объяснил. |
Пожалей, я сейчас умру со смеху
Спасибо, а то устал уже работать, а тут такое развлечение _________________ Ноги - это две лишние руки. |
|
Вернуться к началу |
|
|
Scaramouch
Зарегистрирован: 11.01.2004 Сообщения: 143 Откуда: Столица нашей Родины
|
Добавлено: Чт Сен 30 2004 17:03 Заголовок сообщения: |
|
|
Виноват
replace INTO .... _________________ Ноги - это две лишние руки. |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Пт Окт 01 2004 05:44 Заголовок сообщения: |
|
|
))
Да я рад что смог тебя развеселить.
А насчет структуры таблиц,
Таблицы очень большие временная таблица содержит до 80 полей.
главная таблица около 10
Строк правда пока немнго около 30 К (хотя в будущем будет больше)
Это разработка на начальной стадии пока.
и справочников на самом деле с 10
Так что мне нужно было понять технологию, смысл. механику.
А остальное дело рук.
Ну ладно еще раз спасибо, скоморох (извини если неправильно назвал тебя).
Очень рад что ты помог. Надеюсь это наша не последняя встреча. |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Пн Окт 18 2004 17:39 Заголовок сообщения: |
|
|
tesxtxcxc |
|
Вернуться к началу |
|
|
|