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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как соединить две выборки в PostgreSQL??? 
:(
    Опции темы
Cross
Дата 10.4.2008, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


информатик-аналитик
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 2.6.2006
Где: Москва

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



Есть две таблицы:
Код

CREATE TABLE components
(
  id serial NOT NULL,
  "name" character(50),
  id_ion1 integer,
  amount1 integer,
  id_ion2 integer,
  amount2 integer,
  CONSTRAINT pk_id_components PRIMARY KEY (id),
  CONSTRAINT id_ion1 FOREIGN KEY (id_ion1)
      REFERENCES ions (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT id_ion2 FOREIGN KEY (id_ion2)
      REFERENCES ions (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)


Код

REATE TABLE ions
(
  id serial NOT NULL,
  sign character(2),
  charge numeric(6,3) NOT NULL,
  links character(3),
  basicity integer,
  radius real,
  weight numeric,
  "name" character(15),
  label_ character(2),
  CONSTRAINT pk_id_ions PRIMARY KEY (id)
)


Есть два запроса:

Код

(select c.id, c.name, i.label_, c.amount2, i.name
from components c, ions i
where c.id_ion2 = i.id);

(select c.id, c.name, i.label_, c.amount1, i.name
from components c, ions i
where i.id = c.id_ion1);


Нужно их соединить по полю id. 

Можно ли это сделать одним запросом или нужно вначале создать 
представления и их уже объединять???

PM MAIL ICQ Skype MSN   Вверх
LSD
Дата 11.4.2008, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Что значит соеденить? Что ты хочешь получить в итоге?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
LSD
Дата 11.4.2008, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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




M
LSD
Перенесено из баз данных



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Cross
Дата 11.4.2008, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


информатик-аналитик
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 2.6.2006
Где: Москва

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



Хочу получить такой набор данных:

Код

c.id, c.name, i.label_, c.amount1, i.name, i.label_, c.amount2, i.name

PM MAIL ICQ Skype MSN   Вверх
Magnifico
Дата 11.4.2008, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 23.1.2008
Где: Московская област ь

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



Код

select * from 

(select   c.id     as  id      , c.name, i.label_, c.amount2, i.name
from components c, ions i
where c.id_ion2 = i.id)     as q1

join

(select    c.id      as id       , c.name, i.label_, c.amount1, i.name
from components c, ions i
where i.id = c.id_ion1)      as q2

on  q1.id   =  q2.id


Это устаревший способ объединять таблицы ( времен Мартина Грубера):
Код

select   c.id     as  id      , c.name, i.label_, c.amount2, i.name
from components c, ions i
where c.id_ion2 = i.id



--------------------
Всё  в  порядке   -   спасибо  зарядке  !
PM MAIL   Вверх
Cross
Дата 11.4.2008, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


информатик-аналитик
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 2.6.2006
Где: Москва

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



Спасибо за помощь!!!

Цитата

Это устаревший способ объединять таблицы ( времен Мартина Грубера):


А как тогда надо объединять таблицы - с помощью JOIN, и т.д?
Есть ли в этом какой-либо скрытый смысл или это просто дело синтаксиса?
PM MAIL ICQ Skype MSN   Вверх
Cross
Дата 12.4.2008, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


информатик-аналитик
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 2.6.2006
Где: Москва

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



А как сделать, чтобы поля c.id и c.name не дублировались???

Добавлено @ 11:01
Сама поняла: ВОТ ТАК!!!

Код

select * from 

(select c.id as id, c.name, i.label_, c.amount1, i.name
from components c inner join ions i 
on c.id_ion1 = i.id)     as q1

inner join

(select c.id as id, i.label_, c.amount2, i.name
from components c inner join ions i 
on c.id_ion2 = i.id)      as q2

using (id);




Это сообщение отредактировал(а) Cross - 12.4.2008, 11:04
PM MAIL ICQ Skype MSN   Вверх
Magnifico
Дата 12.4.2008, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 23.1.2008
Где: Московская област ь

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



можно упрстить
Код

select c1.id , c1.name ,  i.name, i.label_
from ions i 
inner join components  as c1
on c1.id_ion1 = i.id
inner join components  as c2
on c2.id_ion2 = i.id


Цитата

Есть ли в этом какой-либо скрытый смысл или это просто дело синтаксиса


никакого. В  некотрых современных субд он больше не поддерживается ( = ,*= , =* )

Код

from components c, ions i
where c.id_ion2 = i.id


равнозначен inner join


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


 




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


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

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