加入两张表
问题描述:
我需要解决下一个问题: 我们有两个表之间没有任何关系。其中首先包含一些关于少数物体的信息。类似的东西加入两张表
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)
)
答
您需要将您的属性表中添加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