加入两张桌子

时间:2013-05-26 11:48:20

标签: sql sql-server tsql

我需要解决下一个问题: 我们有两个表,它们之间没有任何关系。首先介绍一些关于少数对象的信息。像这样的东西

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)
)

1 个答案:

答案 0 :(得分: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