Вопрос № 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
--------- Если дело заслуживает быть сделаным, то оно заслуживает чтобы его сделали ХОРОШО
Отвечает: 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 должно быть уникальным, то лучше в программе предусмотреть проверку на наличие записей в таблицах с этим значением и в случае отсутствия добавлять.
Отвечает: Игорь Елизаров
Здравствуйте, 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