根據我以前的問題,我有這個下表:SQL SELECT從和EAV表
IrisColor
ID Description
1 Blue
2 Gray
3 Green
4 Brown
SkinColor
ID Description
1 White
2 Asian
3 Dark
Gender
ID Description
1 Male
2 Female
並且屬性表
Attributes
ID Description
1 SkinColor
2 IrisColor
3 Gender
而且還EAV表:
PersonDetails
PersonID AttributeID ValueID
121 1 1
121 2 2
121 3 1
122 1 2
122 2 1
122 3 1
所以如果我想要選擇名稱,只有SkinColor的屬性名稱和值我會做這樣的事情:
SELECT p.Name,
a.Description,
v.Description
FROM PersonDetails AS sd
INNER JOIN Subjects AS p ON sd.PersonID=p.ID
INNER JOIN SubjectAttributes AS a ON sd.AttributeID=a.ID
INNER JOIN SkinColor AS v ON sd.ValueID= v.ID
但我應該怎麼辦?如果我想從數據庫中,不僅膚色,但虹膜顏色和性別也選擇對所有的人的所有信息?
以前我知道從SkinColor中選擇那個值,但在PersonDetails中我也有IrisColor和Gender的值。
INNER JOIN SkinColor AS v ON sd.ValueID = v.ID這將不再合適。如何用更具動態性的東西來取代它?
更新:
我用這樣的說法:
SELECT
SubjectID,
SkinColor,
IrisColor,
EyeLidFlisure,
KnownEyeDeffect,
Ethnicity,
Height,
DrivingLicense,
Gender
FROM
(
SELECT SubjectID, attr.Description as attribute, ValueID from SubjectDetails, SubjectAttributes as attr WHERE SubjectDetails.AttributeID=attr.ID
) as t
PIVOT(MAX(ValueID) FOR attribute IN (SkinColor,IrisColor,Gender,EyeLidFlisure,KnownEyeDeffect,Ethnicity,Height,DrivingLicense)) AS t1
現在,我已經在單獨的列中列出的所有屬性,但不是價值說明我值ID。我應該如何繼續?
將EAV轉換爲常規表PersonDetailsT(PersonID,SkinColor,IrisColor,性別......)並將其加入適當的表格。數據透視是DBMS特有的,正確標記DBMS。 – Serg
你可以對連接部分更具體一點嗎?因爲這正是我現在的問題。 – berthos
什麼是您的DBMS? – Serg