-- 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