Свертывание перекрывающихся строк из нескольких соединенных таблиц в как можно меньшее количество строк - PullRequest
0 голосов
/ 10 марта 2010

Table_Design:

ID
"Alpha"
"Beta"

Table_Size:

Design_ID   Size
"Alpha"     S
"Alpha"     M
"Alpha"     L
"Beta"      S
"Beta"      L

Table_Color:

Design_Id   Color
"Alpha"     "Black"
"Alpha"     "Blue"
"Alpha"     "Red"
"Alpha"     "Green"
"Beta"      "Orange"

select D.ID, S.Size, C.Color from
Table_Design D
Left Outer Join
Table_Size S
ON D.ID = S.Design_Id
Left Outer Join
Table_Color C
ON D.ID = C.Design_Id
where
D.ID = 'Alpha'

Урожайность:

D.ID    S.Size  C.Color
Alpha   S       Black
Alpha   S       Blue
Alpha   S       Red
Alpha   S       Green
Alpha   M       Black
Alpha   M       Blue
Alpha   M       Red
Alpha   M       Green
Alpha   L       Black
Alpha   L       Blue
Alpha   L       Red
Alpha   L       Green

В любом случае можно написать запрос, чтобы получить вместо этого:

D.ID    S.Size  C.Color
Alpha   S       Black
Alpha   M       Blue
Alpha   L       Red
Alpha           Green

Ответы [ 2 ]

1 голос
/ 10 марта 2010

Я предполагаю, что вы хотите объединить n-ю строку с размерами с n-й строкой с цветами. В показанной вами схеме таблиц это будет невозможно, поскольку вы не можете надежно определить n-ю строку таблицы.

Я бы сказал, редизайн: создайте отдельную таблицу, чтобы связать дизайн с размером и цветом (который может быть НЕДЕЙСТВИТЕЛЕН), и ваши запросы будут намного проще.

0 голосов
/ 10 марта 2010

Я действительно не одобряю комбинирование данных таким способом, но вы могли бы сделать что-то вроде следующего:

Select Design_Id, 'Color' as Type, Color as Value from Table_Color where Design_Id = 'Alpha'
union all
Select Design_Id, 'Size' as Type, Size as Value from Table_Size where Design_Id = 'Alpha'

, что дает

Design_Id Type  Value
========= ====  =====
Alpha     Color Black
Alpha     Color Blue
Alpha     Color Red
Alpha     Color Green
Alpha     Size  S
Alpha     Size  M
Alpha     Size  L
...