Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Базы данных MySQL

  Все выпуски  

RusFAQ.ru: Базы данных SQL


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Базы данных SQL

Выпуск № 157
от 16.10.2006, 06:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 374, Экспертов: 49
В номере:Вопросов: 1, Ответов: 4


Вопрос № 58470: Добрый день, эксперты! Помогите, срочно нужна помощь. Ни как не могу сформировать запрос, точнее два запроса, на SQL. Есть две таблицы А и В. А (Id, Name) 1 - w 2 - k 3 - l 4 - l 6 - NULL B (Id, Name) ...

Вопрос № 58.470
Добрый день, эксперты!
Помогите, срочно нужна помощь.
Ни как не могу сформировать запрос, точнее два запроса, на SQL.
Есть две таблицы А и В.
А (Id, Name)
1 - w
2 - k
3 - l
4 - l
6 - NULL

B (Id, Name)
1 - w
2 - k
6 - d
7 - f

Первый запрос: налдо из таблице В удалить записи если они есть в таблице А (По полю Id). В примере из таблице В надо удалить (1, 2, 6).

Второй запрос к этим же табличам. Надо в таблицу А вставить данные из таблице В. Вставить в поле Name. То есть если запись есть в обоих таблицах то полю Name таблице А надо задать значение таблице В поля Name. Для примера записе из таблице A с Id 6 надо присвоить значение d, т. к. оно находи в таблице В в поле Name в записе с Id = 6.
Заранее спасибо за ответы.

Еще есть такой вопрос, возможно ли такое сделать. Сделать выборку из таблице SELECT * FROM A, но при этом надо по полю Name отображались значения: за место w - worm, k- kool. При этом в базе данные не меняются. Возможно это сделать?
Заранее всем спасибо за ответы.
Отправлен: 11.10.2006, 05:55
Вопрос задал: AllexZ (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 7)

Отвечает: Samum
Здравствуйте, AllexZ!
1. Запрос:
delete from b using a, b where a.id = b.id;
2. Запрос:
update a, b set a.name = b.name where a.id = b.id
3. В принципе, да:
select id, (case name when 'w' then 'warm' when 'k' then 'kool' end) as name
from a
---------
Если бы программистам за их ошибки отрывали части тела, то в конце концов им пришлось бы использовать голову!
Ответ отправил: Samum (статус: Специалист)
Ответ отправлен: 11.10.2006, 09:43

Отвечает: Проходящий Мимо
Здравствуйте, AllexZ!
Эти действия желательно исполнять в теле процедуры, в цыкле проходя все записи и удаляя нужную. Если бы Вы указали тип сервера, можна было бы написать поконкретнее.
Некоторые SQL-сервера позволяют сделать запрос вида:
delete from B
where B.Id in
(select A.Id from A, B where A.Id=B.Id)

или есть еще такой вариант удаления, работает в Access
delete B.*
from B INNER JOIN A ON B.Id_ZAP = A.Id;

Вставку можно организовать так (но нет гарантии, что у Вас будет это работать):
insert into A (Name)
select B.Name from B left outer join A
on B.Id = A.Id
where A.Id is null

Все это - нестандартные решения с привязкой к конкретной версии SQL-сервера. Если не получится, то Вам нужно использовать хранимые процедуры.

Для отображения нужного написания (за место w - worm, k- kool) заведите еще одну таблице, где пропишите в первом столбце сокращенное значение, во втором - полное (например таблица C с полями Sokr, Poln). Нужно после этого всего-лишь сделать запрос:
select *
from A, C
where A.Name=C.Sokr
---------
Carpe diem!
Ответ отправил: Проходящий Мимо (статус: 8-ой класс)
Ответ отправлен: 11.10.2006, 10:04

Отвечает: Козлов А. С.
Здравствуйте, AllexZ!
Как я понял третий вопрос тебе необходимо изменить поля Name из таблицы B на значение поля Name из таблицы А при одинаковом Id. Если это так то примени следующий запрос (применительно к MySQL):

UPDATE а, b SET a.name = b.name WHERE a.id = b.id AND некоторое_дополнительное_условие

P.S. Данный запрос при отсутствии дополнительного условия заменит ВСЕ записи в таблице А, где A.id = B.id . Так что надо быть осторожней.
P.P.S. Новые значения он не добавляет.
---------
Вы доставили мне истинное удовольствие парни, взвалив на меня Ваши проблемы (М. Фрай).
Ответ отправил: Козлов А. С. (статус: 10-ый класс)
Ответ отправлен: 11.10.2006, 13:44

Отвечает: Grigory
Здравствуйте, AllexZ!
Если я правильно понял, в таблицах A и B значения Id одинаковы для одинаковых записей.
1. Delete from B where Id in (select Id from A)
Для того, чтобы добавить те записи из таблицы B, которых нет в A, в таблицу A:
2. INSERT INTO A (Id, Name) Select Name From B where Name not in (select Name from A)
Если речь идет о переприсвоении значений, то надо воспользоваться командой UPDATE
3. Для того, чтобы в выборке можно было изменить значения, имеет смысл воспользоваться структурой CASE ... WHEN.
Например,
Select Id, 'Name' = case
when Name = 'w' then 'worm'
when Name = 'k' then 'kool'
end
только в данном примере надо вместо звездочки использовать названия полей таблицы.
Ответ отправил: Grigory (статус: 1-ый класс)
Ответ отправлен: 11.10.2006, 16:53


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное