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

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

  Все выпуски  

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


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

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

Выпуск № 119
от 22.07.2006, 09:35

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


Вопрос № 49327: Добрый день. Помогите сформулировать два запроса, ни как не могу сообразить. Имеется две таблицы: 1. Comp (name, id_comp) 2. Address (add, id_comp) Связь по полю id_comp. Как вывести таблицу Address: 1. Чтобы id_comp был з...

Вопрос № 49.327
Добрый день.
Помогите сформулировать два запроса, ни как не могу сообразить.
Имеется две таблицы:
1. Comp (name, id_comp)
2. Address (add, id_comp)
Связь по полю id_comp.
Как вывести таблицу Address:
1. Чтобы id_comp был заменен на name.
2. Чтобы вывелись столбцы add, id_comp, name.
Помогите пожайлуста сформировать эти два запроса.
Заранее спасибо.
Отправлен: 17.07.2006, 09:17
Вопрос задал: AllexZ (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Архангельский Андрей Германович
Здравствуйте, AllexZ!

Select c.NAme. a.Add, c.id_name
From Comp C, Address a
where c.id_comp=a.id_comp
---------
Если дело заслуживает быть сделаным, то оно заслуживает чтобы его сделали ХОРОШО
Ответ отправил: Архангельский Андрей Германович (статус: Практикант)
Ответ отправлен: 17.07.2006, 09:36

Отвечает: GeorgIK
Здравствуйте, AllexZ!
1)
SELECT Address.add, Comp.name
FROM Comp, Address
WHERE Comp.id_comp=Address.id_comp
2)
SELECT Address.add, Comp.id_comp, Comp.name
FROM Comp, Address
WНERE Comp.id_comp=Address.id_comp
Удачи!!!

---------
Можно дать другому разумный совет, но нельзя научить его разумному поведению. (Франсуа де Ларошфуко)
Ответ отправил: GeorgIK (статус: Студент)
Ответ отправлен: 17.07.2006, 09:47

Отвечает: Коляка Вадим
Здравствуйте, AllexZ!
По первому запросу, где id_comp заменен на name
SELECT add,name

FROM Adress INNER JOIN Comp

ON Adress.id_comp = Comp.id_comp

А со вторым чет траблы какие то( не получается.
Ответ отправил: Коляка Вадим (статус: 3-ий класс)
Ответ отправлен: 17.07.2006, 10:04

Отвечает: Филатов Евгений Геннадьевич
Здравствуйте, AllexZ!

1. Select a.add as [Имя поля 1],c.name as [Имя поля 2] from address a inner join comp c on c.id_comp=a.id_comp
2. Select a.add,a.id_comp,c.name from address a inner join comp c on c.id_comp=a.id_comp

В обоих случаях записи будут выводиться только если в таблице Comp имеется соответствующая запись для таблицы Address. Т.е. для каждого id_comp в Address должна быть одна запись в Comp. Если в Comp нет записей для этого условия, то можно воспользоваться соединением Left Join, тогда в значении поля c.Name выведется <Null> для отсутствующих соответствий; если оставить Inner Join, то записи без соответствия во второй таблице выводиться НЕ будут. Если в таблице Comp имеется несколько записей с одинаковым id_comp, то выведется несколько строк для одинаковых add и id_comp из таблицы Address и соответствующими Name из таблицы Comp. Если в таблице Address несколько записей с одинаковым id_comp, то выведутся все строки из таблицы Address с соответствующими строками из таблицы Comp. Т.е. если в таблице Address имеется 2 записи с id_comp=2, а в таблице Comp таких записей 3, то выведутся 6 строк данных.
Если поле id_comp должно быть уникальным, то лучше в программе предусмотреть проверку на наличие записей в таблицах с этим значением и в случае отсутствия добавлять.

С уважением.
Ответ отправил: Филатов Евгений Геннадьевич (статус: 4-ый класс)
Ответ отправлен: 17.07.2006, 19:26

Отвечает: Игорь Елизаров
Здравствуйте, AllexZ!
Дополнения к сказанному выше.
если может случиться , что компьютер есть, а адреса для него еще нету, то для формирования нужной справки 2 лучше делать следующим образом:

select address.add,comp.id_comp, comp.name
from comp left join address on comp.id_comp = address.id_comp

в этом случае в выборку попадут все записи из таблицы comp, даже если им не будет соответствия в таблице Address.
Но вообще таблички хорошо бы дополнить полями дат, например dt_creation (дата создания) в которые по умолчанию заносится текущая дата. В этом случае можно определить ПОСЛЕДНЕЕ местоположение компьютера и его ПОСЛЕДНЕЕ имя, а также отследить динамику изменения адресов и имен
Ответ отправил: Игорь Елизаров (статус: 4-ый класс)
Ответ отправлен: 18.07.2006, 08:56


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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.34 от 01.06.2006
Яндекс Rambler's Top100

В избранное