我在数据库中有两个表,就像这样(为了提问而简化):
我不想修改现有表或创建新表,但我想将所有这些数据放入代码中的统一对象中,如下所示:
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'
然后以某种方式将它们组合在一起......有更好的方法吗?或者如果没有,我从哪里开始?
答案 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;
使用两个表的所有表创建连接表。如果您只需要特定列,请根据您选择的列替换*。