![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
выборка из двух таблиц - ничего сложного? [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