Daniel Polski wrote:
> I'm redesigning parts of my database to normalize it better [...]
> The SELECT query should return all units, and for each configuration
> option it should return either the stored value (if available) or null
> if no such option exist for the unit.
SQLite does not have pivot functions; it is not possible to generate
columns automatically from data values.
In this query, the three configuration options are hardcoded:
SELECT units.id AS "unit id",
cv1.value AS "General option",
cv2.value AS "Color",
cv3.value AS "Number"
FROM units
JOIN unit_types ON units.unit_type_id = unit_types.id
LEFT JOIN (unittype_config
JOIN configvalues
ON unittype_config.configvalue_id = configvalues.id
AND unittype_config.configtype_id = 1) AS cv1
ON unit_types.id = cv1.unit_id
LEFT JOIN (unittype_config
JOIN configvalues
ON unittype_config.configvalue_id = configvalues.id
AND unittype_config.configtype_id = 2) AS cv2
ON unit_types.id = cv2.unit_id
LEFT JOIN (unittype_config
JOIN configvalues
ON unittype_config.configvalue_id = configvalues.id
AND unittype_config.configtype_id = 3) AS cv3
ON unit_types.id = cv3.unit_id
Are you sure that the normalization hasn't gone a *little* bit too far?
> FOREIGN KEY( unit_id ) REFERENCES unit_types ( id )
Why is this column not called unit_type_id?
Regards,
Clemens
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users