如何将数据库中两个表的数据放在一起?

时间:2012-11-12 22:19:54

标签: sql select

我在数据库中有两个表,就像这样(为了提问而简化):

the two tables I have

我不想修改现有表或创建新表,但我想将所有这些数据放入代码中的统一对象中,如下所示:

the data I want

TABLE2中实际上有更多属性,但我只对食物和颜色感兴趣。

我对数据库完全陌生,所以请耐心等待 - 是否有一种简单的方法可以做到这一点?到目前为止我在想的是

SELECT * FROM TABLE1

SELECT PROPERTY_VALUE, UNIQUE_IDENTIFIER 
FROM TABLE2 
WHERE PROPERTY_NAME = 'Favorite Color'

SELECT PROPERTY_VALUE, UNIQUE IDENTIFIER 
FROM TABLE2 
WHERE PROPERTY_NAME = 'Favorite Food'

然后以某种方式将它们组合在一起......有更好的方法吗?或者如果没有,我从哪里开始?

3 个答案:

答案 0 :(得分:6)

有几种方法可以执行此操作,但无论您使用哪种方法,通常需要在编写查询时知道结果集中列的数量和名称 。我可以给你最喜欢的食物和最喜欢的颜色,但如果该表中有任何其他属性你将看不到它们。使用vanilla sql无法自动化;如果要从这种模式中获取任意属性,则必须使用动态sql或客户端语言。

有了这种约束,让我们看看你能做到这一点的一种方式:

SELECT m.unique, m.last_name, m.first_Name, s1.property_Value As Favorite_Food, s2.property_Value As Favorite_Color
FROM Table_1 m
LEFT JOIN Table_2 s1 ON s1.unique = m.unique and s1.property_Name = 'Favorite Food'
LEFT JOIN Table_2 s2 ON s2.unique = m.unique and s2.property_Name = 'Favorite Color'

另一种选择是使用PIVOT keyword,但在我们了解您的实际数据的更多详细信息之前,上面的连接就足够了。

答案 1 :(得分:1)

以下是创建两个现有表的新表TABLE3的代码,如果不需要创建新表,只需抛出第一行(INSERT)。

INSERT INTO TABLE3 
SELECT 
    TABLE1.`UNIQUE IDENTIFIER`, 
    TABLE1.`First Name`, 
    TABLE1.`Last Name`, 
    TABLE2a.`Property Value`, 
    TABLE2b.`Property Value` 
 FROM TABLE1
 INNER JOIN TABLE2 AS TABLE2a 
     ON TABLE2a.`UNIQUE IDENTIFIER`=TABLE1.`UNIQUE IDENTIFIER`
 INNER JOIN TABLE2 AS TABLE2b 
     ON TABLE2b.`UNIQUE IDENTIFIER`=TABLE1.`UNIQUE IDENTIFIER` 
 WHERE 
     TABLE2a.`Property Name`='Favorite Food' 
 AND
     TABLE2b.`Propery Name`='Favorite Color';

答案 2 :(得分:0)

加入怎么样?

select * from TABLE1 join TABLE2 on TABLE1.UNIQUE_IDENTIFIER = TABLE2.UNIQUE_IDENTIFIER;

使用两个表的所有表创建连接表。如果您只需要特定列,请根据您选择的列替换*。