-- MS ACCESS sql to present row based data as column based
-- Gives too many rows probably Cartesian product. If I have 5 toys with one color and one weight each I expect 5 rows, but get more
SELECT
t.ToyId
,t.ToyName
,p1.TextValue as 'Color'
,p2.FloatValue as 'Weight'
FROM (my_toys t
LEFT OUTER JOIN properties p1 ON (t.ToyId = p1.ToyId) AND (p1.propertyId='Color')))
LEFT OUTER JOIN properties p2 ON (t.ToyId = p2.ToyId) AND (p2.propertyId='Weight'))
我在MS Access SQL中演示未来的MySQL数据库。我有一张玩具的桌子,我有一张桌子,像颜色,重量,长度等属性。属性表中的每一行代表一个玩具的属性,所以它是一个基于行的存储。属性表中的行的示例可以是:MS Access的SQL - 多个连接与AND给笛卡尔产品?
- 玩具= 1; ProperyType = '颜色'; TextValue = '蓝';的floatValue = NULL;
- 玩具= 1; ProperyType ='Weight'TextValue = null;的floatValue = 42;
- Toy = 1; ProperyType ='Length'TextValue = null;的floatValue = 123;
- Toy = 2; ProperyType ='Color'; TextValue = '红色';的floatValue = NULL;
当我设法得到语法正确上面的SQL给人不是每个玩具一行与颜色和重量,而是笛卡尔乘积列,至少有太多的行。这个sql问题的目的是为了获得更好的人类可读性,将基于行的数据模型转换为基于列的数据模型。
我已经为MySQL中的视图制作了类似的结构,但是我无法理解我在MS Access SQL代码中犯的错误。谁能帮我吗?
(请注意我的实际项目不是玩具,因此代码可能包含一些打字错误)
我不习惯于EAV结构,但是如果你希望输出每个玩具只显示一行,我认为你需要一个GROUP BY子句。 – MoondogsMaDawg
括号看起来不正确。 我数5(和7) – AntDC
我知道访问爱添加)它可能是一个操作问题的顺序。你可以删除它们或使用子选择吗? – xQbert