Исходя из текстовой части вашего вопроса, этот запрос сгенерирует желаемый результат:
SELECT links.id AS link_id,
node_a.site_id AS site_a_id,
node_a.latitude AS lat_site_a,
node_a.longitude AS lon_site_a,
node_b.site_id AS site_b_id,
node_b.latitude AS lat_site_b,
node_b.longitude AS lon_site_b
FROM links
INNER JOIN nodes@nodes_dblink node_a ON (links.site_a = node_a.site_id)
INNER JOIN nodes@nodes_dblink node_b ON (links.site_b = node_b.site_id)
ORDER BY links.id;
Из запроса, который вы разместили, кажется, что у вас есть и другие критерии для включения, которые могут означать, что вы хотите что-то похожее на это:
SELECT links.id AS link_id,
node_a.site_id AS site_a_id,
node_a.latitude AS lat_site_a,
node_a.longitude AS lon_site_a,
node_b.site_id AS site_b_id,
node_b.latitude AS lat_site_b,
node_b.longitude AS lon_site_b
FROM links
INNER JOIN nodes@nodes_dblink node_a ON (links.site_a = node_a.site_id)
INNER JOIN nodes@nodes_dblink node_b ON (links.site_b = node_b.site_id)
WHERE links.site_a IS NOT NULL
AND links.site_b IS NOT NULL
AND links.region IN (8, 6)
ORDER BY links.id;
Надеюсь, это поможет ...
EDIT:
Если ваша ссылка на БД представляет собой проблему, попробуйте вернуть по ссылке только те данные, которые вам нужны, заранее, создав представление удаленной БД или материализованное представление локальной БД.
Если это нецелесообразно, тогда сравните относительные планы объяснения для вышеупомянутого запроса с этим и посмотрите, лучше ли это
WITH node_data
AS (SELECT site_id,
latitude,
longitude
FROM nodes@nodes_dblink node
WHERE EXISTS (SELECT 1
FROM links
WHERE links.site_a = node.site_id
OR links.site_b = node.site_id))
SELECT links.id AS link_id,
node_a.site_id AS site_a_id,
node_a.latitude AS lat_site_a,
node_a.longitude AS lon_site_a,
node_b.site_id AS site_b_id,
node_b.latitude AS lat_site_b,
node_b.longitude AS lon_site_b
FROM links
INNER JOIN node_data node_a ON (links.site_a = node_a.site_id)
INNER JOIN node_data node_b ON (links.site_b = node_b.site_id)
WHERE links.site_a IS NOT NULL
AND links.site_b IS NOT NULL
AND links.region IN (8, 6)
ORDER BY links.id;