0

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

我有两张桌子

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

我想要的数据

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'

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

4

3 回答 3

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 关键字,但在我们了解您的实际数据的更多详细信息之前,上面的连接就足够了。

于 2012-11-12T22:26:51.810 回答
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';
于 2012-11-12T22:29:53.923 回答
0

加盟怎么样?

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

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

于 2012-11-12T22:25:54.713 回答