我需要解决下一个问题: 我们有两个表,它们之间没有任何关系。首先介绍一些关于少数对象的信息。像这样的东西
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 :(得分: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