Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [PostgreSQL ]Объединение блоков данных. 
:(
    Опции темы
mastercz
Дата 24.12.2010, 02:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 5.11.2008

Репутация: нет
Всего: нет



Добрый день. 
Подскажите пожалуйста, как написать функцию  решающую следующую задачу. 
Краем сознания чувствую решение существует, но немогу его нащупать smile 
Приведу  пример. 
Заранее благоден за помощь.

Есть таблица [person] содержащая список людей. 
Код

[person]
 (id)     (content)
  1       Иванов
  2       Петров


 Есть таблица [person_address]  содержащая ссылки на записи в [person].
Код

[person_address] 
  (id)     (address)       (person_id)
    1        дом1              1
    2        дом2              1
    3        дом1              2
    4        дом3              2



 Есть таблица [actions] содержащая  ссылки на записи в [person] и в [person_address]
Код

[action] 
  (id)     (person_address_id)       (person_id)    (actions)
    1             1                   1             зевнул
    2             2                   1             заснул
    3             3                   2             гуляет
    4             4                   2             спит


1.Необходимо передать [person_address] от Петрова к Иванову без дубликатов
Код

[person_address] 
  (id)     (address)       (person_id)
    1        дом1              1
    2        дом2              1
    4        дом3              1


2. Необходимо передать [actions] от Петрова к Иванову перепривязав адрес где это необходимо
Код

[action]
  (id)     (person_address_id)       (person_id)    (actions)
    1             1                    1             зевнул
    2             2                    1             заснул
    3             1                    1             гуляет
    4             4                    1             спит


PM MAIL   Вверх
Abbath1349
Дата 12.1.2011, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 214
Регистрация: 16.6.2010

Репутация: нет
Всего: нет



Может соединить их Right JOIN или LEFT JOIN хотя наверно ошибаюсь
PM MAIL   Вверх
Deniz
Дата 13.1.2011, 07:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 6
Всего: 44



Выбрать все адреса Петрова, которых нет у Иванова
Код
select pa1.address
from person_address pa1
where (pa1.person_id = 2)
  and (pa1.address not in (select address from person_address where person_id = 1))



--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Akina
Дата 13.1.2011, 09:04 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



У Вас имеются избыточные связи - в таблице actions полю-ссылке на person быть не положено. Образуется цикл и потенция противоречивости. Удалите.
Тогда выполнение первой части задачи автоматически выполнит и вторую её часть.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0632 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.