Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

выборка из двух таблиц - ничего сложного? [D6, Paradox]


ka ©   (2004-10-22 19:08:00) 

Здравствуйте. Подскажите с SQL - простым как сама жизнь и непонятным как женщина :)

Имеется две таблицы с полями примерно такими:
1-я  goodsmain
pSysNo | pName | pColor
pSysNo - ключ

2-я goodssecond
sCode | sSysNo | sSize
goodssecond связана с goodsmain через pSysNo -> sSysNo

Для записи в 1-й таблице существует несколько записей во-второй. Это таблицы товаров.

То есть для определенного товара заданного названием и цветом существуют разные
размеры.

Так вот нужно сделать запрос.

Выбрать те товары, у которых количество разных размеров осталось допустим < 3. Именно разных, то есть если два одинаковых размера, это один.

И еще запрос.
Выбрать товары, у которых количество едениц товара (независимо от размера) тоже допустим < 3. То есть у которых количество записей во второй таблице < 3.

Надеюсь доступно объяснил. Спасибо.


MORA   (2004-10-23 19:58:00) [1]

А какая БД у тебя? Есси SQL Server 2000, можно попробовать поиграться с ANY (или SOME).

У меня вот так заработало в Access и Interbase.

select *
from goodsmain
where exists (
       select distinct sSize
       from goodssecond
       where sSysNo = goodsmain.pSysNo
       group by sSize
       having count(sSize) < 3
)


vecna   (2004-10-23 02:04:00) [2]

наверное так:

select *
 from goodsmain m
where exists (
        select sSysNo
          from goodssecond
         where sSysNo = m.pSysNo
         group by sSysNo
        having count(distinct(sSize)) < 3
      )

тяжело думать в пятницу =)


vecna   (2004-10-23 01:51:00) [3]

ой нет, ху...ю написал =)


vecna   (2004-10-23 01:49:00) [4]

пардон, не =3, а <3 =))


vecna   (2004-10-23 01:48:00) [5]

create table goodsmain (
 pSysNo number primary key,
 pName varchar2(10),
 pColor number
);
 
create table goodssecond (
 sCode number primary key,
 sSysNo number references goodsmain (pSysNo),
 sSize number
);

begin
insert into goodsmain values (1, 'один', 1);
insert into goodsmain values (2, 'один', 2);
insert into goodsmain values (3, 'один', 3);
insert into goodsmain values (4, 'один', 4);
insert into goodsmain values (5, 'два', 3);
insert into goodsmain values (6, 'два', 4);
insert into goodsmain values (7, 'три', 4);
insert into goodssecond values (1, 1, 11);
insert into goodssecond values (2, 1, 12);
insert into goodssecond values (3, 1, 12);
insert into goodssecond values (4, 2, 11);
insert into goodssecond values (5, 2, 12);
insert into goodssecond values (6, 3, 11);
insert into goodssecond values (7, 3, 12);
insert into goodssecond values (8, 3, 13);
insert into goodssecond values (9, 3, 14);
end;

select *
 from goodsmain
where pSysNo in (  
        select distinct sSysNo
          from goodssecond
         group by sSysNo
        having count(1) = 3
      )


ka   (2004-10-22 20:58:00) [6]

Меня не поняли. Когда я говорю выбрать товар, я имею ввиду выбрать товар из первой таблицы - goodsmain, то есть выбрать pSysNo, pName и pColor. Допустим pName = "джинсы", pColor = "синий", так вот синие джинсы разных у которых размеров осталось меньше трех или которых воообще осталось меньше трех мне и нужно выбрать. Вот.


Пуртик   (2004-10-22 20:39:00) [7]


> Выбрать те товары, у которых количество разных размеров
> осталось допустим < 3. Именно разных, то есть если два одинаковых
> размера, это один.

поподробнее

> рать товары, у которых количество едениц товара (независимо
> от размера) тоже допустим < 3. То есть у которых количество
> записей во второй таблице < 3.

select sCode, count(sSysNo)
from goodssecond
group by sCode
having count(sSysNo)<3


Наверх

Титульная страница Поиск, карта сайта Написать письмо