2013-05-26 126 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