2013-05-26 5 views
0

Мне нужно решить следующую проблему: у нас есть две таблицы без каких-либо отношений между ними. Первое из них содержит информацию о нескольких объектах. Что-то вроде этогоПрисоединение к двум таблицам

create table properties 
(
    obj1_prop1 varchar(10), 
    obj1_prop2 varchar(10), 
    obj1_prop3 varchar(10), 
    obj2_prop1 varchar(10), 
    obj2_prop2 varchar(10), 
    obj2_prop3 varchar(10), 
    obj3_prop1 varchar(10), 
    obj3_prop2 varchar(10), 
    obj3_prop3 varchar(10), 
    obj4_prop1 varchar(10), 
    obj4_prop2 varchar(10), 
    obj4_prop3 varchar(10), 
    id int not null, 
    primary key (id) 
) 

Каждый из этих объектов состоит из меньших объектов (каждый из которых обладает дополнительным свойством). У нас нет информации о количестве меньших объектов. Эта информация сохраняет во второй таблице, что-то вроде этого

create table parts 
(
    obj_id int not null, 
    prop1 varchar(10), 
    prop2 varchar(10), 
    prop3 varchar(10), 
    extra_prop varchar(10) 
) 

Что запрос я должен использовать, чтобы получить данные из этой таблицы в формате, как первая таблица имеет этот extra_prop столбец. Результат должен быть выглядеть у нас есть таблица со следующими полями:

create table properties 
(
    obj1_prop1 varchar(10), 
    obj1_prop2 varchar(10), 
    obj1_prop3 varchar(10), 
    obj1_extra_prop varchar(10), 
    obj2_prop1 varchar(10), 
    obj2_prop2 varchar(10), 
    obj2_prop3 varchar(10), 
    obj2_extra_prop varchar(10), 
    obj3_prop1 varchar(10), 
    obj3_prop2 varchar(10), 
    obj3_prop3 varchar(10), 
    obj3_extra_prop varchar(10), 
    obj4_prop1 varchar(10), 
    obj4_prop2 varchar(10), 
    obj4_prop3 varchar(10), 
    obj4_extra_prop varchar(10), 
    id int not null, 
    primary key (id) 
) 

ответ

0

Вам нужно будет добавить OBJ_ID ссылочного столбца в таблицу свойств. Поэтому в идеале у вас будет 4 таких поля. Тогда вы можете присоединиться.

create table properties 
(
    obj1_id int, 
    obj1_prop1 varchar(10), 
obj1_prop2 varchar(10), 
obj1_prop3 varchar(10), 
obj2_id int, 
obj2_prop1 varchar(10), 
obj2_prop2 varchar(10), 
obj2_prop3 varchar(10), 
obj3_id int, 
obj3_prop1 varchar(10), 
obj3_prop2 varchar(10), 
obj3_prop3 varchar(10), 
obj4_id int, 
obj4_prop1 varchar(10), 
obj4_prop2 varchar(10), 
obj4_prop3 varchar(10), 
id int not null, 
primary key (id) 
) 

Затем вы можете присоединиться к следующим

SELECT *[set your columns here] FROM properties AS p 
LEFT OUTER JOIN parts AS p1 ON p1.obj_id = p.obj1_id 
LEFT OUTER JOIN parts AS p2 ON p2.obj_id = p.obj2_id 
LEFT OUTER JOIN parts AS p3 ON p3.obj_id = p.obj3_id 
LEFT OUTER JOIN parts AS p4 ON p4.obj_id = p.obj4_id 
Смежные вопросы