私はこの次の表があります。また、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