I'm trying to extract data from the metadatavalue table, including rows
where a particular metadata_field may not exist, but my attempts using LEFT
OUTER JOINs lead to these rows being omitted.

For example:

dspace=> SELECT DISTINCT mv1.item_id, mv1.text_value AS date,
mv2.text_value as type
FROM metadatavalue AS mv1
LEFT JOIN metadatavalue AS mv2 ON mv1.item_id = mv2.item_id
LEFT JOIN metadatavalue AS mv3 ON mv1.item_id = mv3.item_id
WHERE mv1.metadata_field_id = 12 AND mv1.text_value LIKE '2007-11-12T%Z'
AND mv2.metadata_field_id = 66 AND mv2.text_value = 'Thesis'
ORDER BY mv1.item_id;
 item_id |         date         |  type
---------+----------------------+--------
     163 | 2007-11-12T09:58:28Z | Thesis
     164 | 2007-11-12T09:59:31Z | Thesis
     165 | 2007-11-12T09:59:40Z | Thesis
     166 | 2007-11-12T13:31:43Z | Thesis
     168 | 2007-11-12T13:32:02Z | Thesis
     169 | 2007-11-12T13:32:09Z | Thesis
     172 | 2007-11-12T13:32:30Z | Thesis
(7 rows)

... but:

dspace=> SELECT DISTINCT mv1.item_id, mv1.text_value AS date,
mv2.text_value as type
FROM metadatavalue AS mv1
LEFT JOIN metadatavalue AS mv2 ON mv1.item_id = mv2.item_id
LEFT JOIN metadatavalue AS mv3 ON mv1.item_id = mv3.item_id
WHERE mv1.metadata_field_id = 12 AND mv1.text_value LIKE '2007-11-12T%Z'
AND mv2.metadata_field_id = 66 AND mv2.text_value = 'Thesis'
AND mv3.metadata_field_id = 75
ORDER BY mv1.item_id;
 item_id |         date         |  type
---------+----------------------+--------
     163 | 2007-11-12T09:58:28Z | Thesis
(1 row)

If I had null values corresponding to metadata_field_id = 75, I would have
got all my records, but where there is no metadata_field_id 75, I get zero
rows.

Is there a way to do this?

Sean
--
------------------------------------------------------------------------------
_______________________________________________
DSpace-tech mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/dspace-tech
List Etiquette: https://wiki.duraspace.org/display/DSPACE/Mailing+List+Etiquette

Reply via email to