join + having+postgresql
От: Аноним  
Дата: 02.12.13 06:15
Оценка:
Здрасте, помогите с запросом плиз
есть таблицы
images
— id
— status
— name

deals
— id
— image_id
— status
— name

Так вот мне нужно взять получить все images где есть больше одного deal`а
делаю так SELECT images.*,images.id FROM images join deals on deals.image_id=images.id group by images.id having(count(images.id)>1) выбирает правильно, но мне нужно чтобы искал не все deals а c определенным статусом, пробую так

SELECT images.*,images.id FROM "images" join deals on deals.image_id=images.id and deals.state='online' group by images.id having(count(images.id)>1) не выходит считает having по всем(

Как это правильно делать?
psql join having
Re: join + having+postgresql
От: cvetkov  
Дата: 02.12.13 06:37
Оценка: -1
перенеси словие в where clause.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Re[2]: join + having+postgresql
От: Аноним  
Дата: 02.12.13 07:15
Оценка:
Здравствуйте, cvetkov, Вы писали:

C>перенеси словие в where clause.


SELECT images.*,images.id FROM "images" join deals on deals.image_id=images.id where deals.state='online' group by images.id having(count(images.id)>1)

Так тоже не работает!!
Re: join + having+postgresql
От: DrDred Россия  
Дата: 02.12.13 07:41
Оценка: 1 (1) +1
Здравствуйте, Аноним, Вы писали:

А>Как это правильно делать?


Кмк, там должно быть
having count(deals.id) > 1
--
WBR, Alexander
Re: join + having+postgresql
От: DrDred Россия  
Дата: 02.12.13 07:43
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здрасте, помогите с запросом плиз

А>есть таблицы
А>images
А>- id
А>- status
А>- name

А>deals

А>- id
А>- image_id
А>- status
А>- name

А>Так вот мне нужно взять получить все images где есть больше одного deal`а

А>делаю так SELECT images.*,images.id FROM images join deals on deals.image_id=images.id group by images.id having(count(images.id)>1) выбирает правильно, но мне нужно чтобы искал не все deals а c определенным статусом, пробую так

А>SELECT images.*,images.id FROM "images" join deals on deals.image_id=images.id and deals.state='online' group by images.id having(count(images.id)>1) не выходит считает having по всем(


А>Как это правильно делать?


И кстати, как запрос вообще работает? images.*, при том, что в group by только images.id
Нормальный сервер тут должен вообще-то syntax error выдавать
--
WBR, Alexander
Re: join + having+postgresql
От: maxkar  
Дата: 02.12.13 13:40
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как это правильно делать?


Сделать пример правильный. Ваш код у меня работает:
  Скрытый текст
create table images (
  id integer not null primary key,
  status integer,
  name integer);

create table deals (
  id integer not null primary key,
  image_id integer,
  status character varying,
  name integer);

insert into images values (1, 1, 1), (2,2,2), (3,3,3);
insert into deals values
  (1, 1,  '', 1),
  (2, 2, 'a', 1),
  (3, 2, 'online', 1),
  (4, 3, 'online', 1),
  (5, 3, 'online', 1),
  (6, 3, 'offline', 1);

SELECT images.*,images.id FROM images join deals on deals.image_id=images.id group by images.id having(count(images.id)>1);
SELECT images.*,images.id FROM images join deals on deals.image_id=images.id and deals.status='online'  group by images.id having(count(images.id)>1);

drop table images;
drop table deals;

В выводе:
  Скрытый текст
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "images_pkey" for table "images"
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "deals_pkey" for table "deals"
query result with 2 rows discarded.

query result with 1 row discarded.


Query returned successfully with no result in 71 ms.

Как видите, считает правильно. Postgresql 9.2
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.