Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Нетипичная таблица, вопрос по SELECT / 6 сообщений из 6, страница 1 из 1
30.03.2006, 18:07
    #33636008
u78
u78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нетипичная таблица, вопрос по SELECT
Подскажите, как называется хранение данных когда наименование параметра(свойства,поля) не в столбцах а в строках? Как найти (в данном случае товар) с определённым набором параметров, если параметров может быть сколь угодно много?
Например необходимо найти товар у которого (параметр=пар2 AND значение=4) AND (параметр=пар1 AND значение=value1)

товар|параметр|значение
---------------------------
тов1 | пар1 | value1
тов1 | пар2 | 4
тов1 | пар3 | value2
тов2 | пар1 | 198
тов2 | пар2 | да
тов2 | пар3 | value99

С уважением Артём
ps не могу даже поискать, т.к. не могу сформулировать проблему в нескольких словах.
Буду благодарен не только за конкретные советы но и за ссылки на любые источники.
...
Рейтинг: 0 / 0
30.03.2006, 21:19
    #33636356
Нетипичная таблица, вопрос по SELECT
А что тут сложного ? Замени свой "связующий" AND на OR:

select * from testparts
where partParam='par2' and paramValue='4'
OR
partParam='par1' and paramValue='value1'

Или что-то я не так понял ?
...
Рейтинг: 0 / 0
30.03.2006, 22:08
    #33636387
u78
u78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нетипичная таблица, вопрос по SELECT
в этом случае найдётся товар (товары) у которого
partParam='par2' and paramValue='4'
и другой товар (товары) у которого
partParam='par1' and paramValue='value1'
а мне нужен товар у которого partParam='par2' and paramValue='4' и partParam='par1' and paramValue='value1'
...
Рейтинг: 0 / 0
30.03.2006, 22:16
    #33636394
Garya
Garya Привилегированный пользователь
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нетипичная таблица, вопрос по SELECT
Код: plaintext
1.
2.
3.
4.
select Tovar from testparts a
inner join testparts b
on a.Tovar=b.Tovar
where a.partParam='par2' and a.paramValue='4'
  and b.partParam='par1' and b.paramValue='value1'
...
Рейтинг: 0 / 0
30.03.2006, 22:21
    #33636398
Нетипичная таблица, вопрос по SELECT
Сорри, не сразу понял, что ты имел ввиду.
Тебе, кажись, надо найти ОДИН товар, т.е. выбрать ОДНУ строку, отвечающий сразу двум парам условий (и для каждого из условий в таблице своя отдельная строка, отвечающая ему).
А то, что я написал в предыдущем посте, выдаст тебе ДВЕ строки для одного и того же товара.

Тогда входм в раздел SQL портала (5.1) или в SQL-manager (5.0.x) и делаем так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
create table testParts(partNumber char( 20 ),partParam char( 20 ),paramValue char( 30 )
insert into testparts values ('tov1','par1','value1') 
insert into testparts values ('tov1','par2', 4 ) 
insert into testparts values ('tov1','par3','value2') 
insert into testparts values ('tov2','par1','198) 
insert into testparts values ('tov2','par2','yes')
insert into testparts values ('tov2','par3,'value99')

Далее делаем так:
Код: plaintext
1.
2.
3.
4.
select * from testparts t1,testparts t2
where t1.partNumber=t2.partNumber
   and t1.partParam='par1' and t1.paramValue='value1'
   and t2.partParam='par2' and t2.paramValue='4'

Результат должен быть таким:
Код: plaintext
1.
2.
3.
# partNumber partParam paramValue partNumber partParam paramValue 
--------------------------------------------------------------------
 1  tov1       par1      value1      tov1      par2       4    
...
Рейтинг: 0 / 0
31.03.2006, 13:56
    #33637635
u78
u78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нетипичная таблица, вопрос по SELECT
Отлично. Большое спасибо.
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Нетипичная таблица, вопрос по SELECT / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]