Страница 1 из 1
Подключение внешней таблицы
Добавлено: 24 сен 2008, 16:14
urb@n
Подскажите плз как выйти из витуации:
есть слой полигонов (100 записей в таблице, т.е. полигонов) + есть внешняя таблица с атрибутами (2700 записей). в обеих таблицах есть текстовое поле для связывания их между собой. в итоге должна получится таблица, где этим 100 полигонам будут соответствовать эти все 2700 записей.
у меня получается что при выполнении join выбираются 100 записей из таблицы атрибутов и все, остальные кудато-деваются, причем в настройках связывания все нормально
спасибо за ответы
Re: Подключение внешней таблицы
Добавлено: 25 сен 2008, 02:32
Максим Дубинин
все правильно происходит
Как может в одной таблице 1 геометрии соответствовать несколько записей? это отношение один-ко-многим, операция join это отношение один-к-одному
Re: Подключение внешней таблицы
Добавлено: 25 сен 2008, 06:41
AndreyL
sim писал(а):все правильно происходит
Как может в одной таблице 1 геометрии соответствовать несколько записей? это отношение один-ко-многим, операция join это отношение один-к-одному
В целом да, но возможно отношение много-к-одному (именно так: слева атрибутивная таблица, справа связанная), ведь внешний ключ атрибутивной таблицы не обязан быть первичным.
А вообще-то только что тут обсудили
http://www.dataplus.ru/forum/forum_posts.asp?TID=6669
Re: Подключение внешней таблицы
Добавлено: 25 сен 2008, 07:23
Максим Дубинин
да, но это уже будет link, а не join, верно? какое-то время решал задачу как таблице с 100 записями (10 не уникальных ID по которым осуществляется связывание + куча других разнообразных атрибутов) сопоставить 10 полигонов (10 уникальных ID), ничего проще чем цикл из 10 итераций join, пересохранить, удалить только что присоединенные, опять соединить с 90 оставшимися и т.д. придумать не смог.
А по ссылке, в качестве рецепта, насколько я понял речь идет о превращении неуникального ключа в уникальный, так ведь?
Re: Подключение внешней таблицы
Добавлено: 25 сен 2008, 07:34
AndreyL
sim писал(а):А по ссылке, в качестве рецепта, насколько я понял речь идет о превращении неуникального ключа в уникальный, так ведь?
Именно так, поскольку, по смыслу задачи, именно это и нужно было. Только-что возникла иная мысль - а если этот запрос кидать на присоединенную таблицу в качестве определяющего? Не на слой, а на саму таблицу.
sim писал(а):какое-то время решал задачу как таблице с 100 записями (10 не уникальных ID по которым осуществляется связывание + куча других разнообразных атрибутов) сопоставить 10 полигонов (10 уникальных ID), ничего проще чем цикл из 10 итераций join, пересохранить, удалить только что присоединенные, опять соединить с 90 оставшимися и т.д. придумать не смог.
Не совсем понял Вашу задачу. Таблица со 100 записями не атрибутивная (не является таблицей слоя)? Тогда зачем к ней цеплять полигоны? Или нужно зацепить только атрибуты полигонов? Тогда проще в Аксесс.
Re: Подключение внешней таблицы
Добавлено: 25 сен 2008, 07:50
Максим Дубинин
да не, задача такая же как у автора темы, много атрибутики и мало полигонов, результат - дублирующиеся полигоны с разной атрибутикой, я просто хотел показать таким образом, что разовым join это не решается, как в процес и link'ом
кстати тоже пришло в голову, что должно изящно решаться в PostGIS/PostreSQL
Re: Подключение внешней таблицы
Добавлено: 25 сен 2008, 08:42
AndreyL
А у меня в Аксессе получилось.
Для начала копируем исходный слой – в базе появилось две таблицы. Если в качестве ключевого поля используется поле OBJECTID, то его нужно продублировать (новые OBJECTID будут другие) Делаем запрос, объединяя таблицу атрибутов исходного слоя с присоединенной таблицей по ключевому полю, запрос организуем как запрос на создание таблицы и сохраняем под именем сделанной копии. В только что созданной таблице удаляем поле OBJECTID, сохраняем, вставляем поле OBJECTID как счетчик, сохраняем.
Делаем запрос, объединяя новую таблицу с исходной таблицей атрибутов по нашему ключевому полю, а исходную таблицу атрибутов с таблицей _SHAPE_Index по OBJECTID. Берем OBJECTID из новой таблицы, все остальное из _SHAPE_Index, сохраняем в таблицу под именем _SHAPE_Index.
Добавляем новый слой в АркМАП
Re: Подключение внешней таблицы
Добавлено: 25 сен 2008, 08:45
AndreyL
Да, в том вопросе, который мы обсуждали на ДатаПлюсовском форуме, не было задачи создания нового слоя. У Вас же именно такая задача и ставилась (если я правильно Вас понял)