PostgreSQL - объединение 3-х пар «ключ-значение» подзапроса - PullRequest
0 голосов
/ 25 октября 2011

Вот схема БД

Tables-

enter image description here

Я хочу написать запрос для поиска всех файлов, имеющих значение метаданных, например ('abc') и получите конкретное соответствующее значение метаданных для этого файла.

Так что для вышеупомянутого поиска все файлы, которые имеют abc1 в качестве одного из значений, и дайте мне соответствующее значение 'geo' ключа. Я знаю, что это можно сделать с помощью подзапроса. Но хочу найти наиболее эффективный способ.

1 Ответ

1 голос
/ 25 октября 2011

Может выглядеть так. Должен быть самый эффективный способ тоже.

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'

Обязательно присваивайте псевдонимы нескольким экземплярам одной и той же таблицы в одном запросе.

Обзор связанных методов запросов приведен в следующей строке: Как отфильтровать результаты SQL в соотношении "сквозная связь" .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...