这是db架构
表 -
我想写一个查询来搜索所有具有元数据值的文件,如('abc') 并获取该文件的特定对应元数据值。
因此,上面搜索所有具有abc1作为其中一个值的文件,并给我相应的'geo'键的值。 我知道它可以通过子查询来完成。但是想找到最有效的方法。
答案 0 :(得分:1)
看起来像这样。也应该是最有效的方式。
SELECT m0.m_value
FROM metadata m
JOIN file_metadata fm ON fm.m_foreign_key = m.m_id
JOIN file_metadata fm0 ON fm0.f_foreign_key = fm.f_foreign_key
-- AND fm0.m_foreign_key <> fm.m_foreign_key
-- may or may not be necessary, depending on the selectivity of 'geo'
JOIN metadata m0 ON m0.m_id = fm0.m_foreign_key
WHERE m.m_value = 'abc1'
AND m0.key = 'geo'
确保在一个查询中将别名分配给同一个表的多个实例。
有关相关查询技术的概述,请参阅此阵容:How to filter SQL results in a has-many-through relation。