オブジェクトのテーブルと、オブジェクトが持つ場合と持たない場合があるさまざまな属性を含む属性テーブルがあります。
オブジェクトとともにすべての属性を取得するか、属性がない場合は null を取得します。
クエリでの私の最初の試みはこれでした:
SELECT o.Id ,
aa.Value AS AttributeA,
ab.Value AS AttributeB,
ac.Value AS AttributeC
FROM Objects o
LEFT OUTER JOIN Attributes aa
ON (o.Id = aa.ObjectId)
LEFT OUTER JOIN Attributes ab
ON (o.Id = ab.ObjectId)
LEFT OUTER JOIN Attributes ac
ON (o.Id = ac.ObjectId)
WHERE (aa.AttributeTypeId = 1 OR aa.AttributeTypeId IS NULL)
AND (ab.AttributeTypeId = 2 OR ab.AttributeTypeId IS NULL)
AND (ac.AttributeTypeId = 3 OR ac.AttributeTypeId IS NULL)
AND o.Id = @objectId
これに関する問題は、オブジェクトがまだ属性 a を持っていない場合、aa サブセットが空であるため、属性をまったく持たないオブジェクトのみが返されることです。
多数のUNIONに入ることなく、属性シナリオが混在していても、SQL Serverがすべてのオブジェクトを返すようにするにはどうすればよいですか (属性タイプの数は20以上です)。