Я использую postgres 9.4
.У меня есть две таблицы tblcomponent
и tblprofile
без ссылки на внешний ключ.
Я хочу выбрать данные из обеих таблиц.Отношение выглядит так:
tblcomponent
-> tblprofile
Если требуемые данные не найдены в tblprofile
, то должны быть выбраны только данные tblcomponent
.Если сам tblcomponent
не содержит запрошенных данных, то данные не нужно извлекать.
Запрос:
SELECT subquery1.pk_szid, subquery1.xmldata, tblprofile.pk_szid, tblprofile.xmldata
FROM tblprofile,
(SELECT tblcomponent.pk_szid, tblcomponent.xmldata
FROM tblcomponent WHERE pk_szid != 'DEFAULT' ) subquery1
WHERE
CAST((xpath('/Profile/ComponentIDs/ComponentID[@Family="Flow"]/text()', tblprofile.xmldata))[1] AS TEXT) = subquery1.pk_szid
Приведенный выше запрос возвращает, если данные существуют в обеих таблицах.Как получить данные из subquery1
при внешнем запросе, т. Е. При сбое предложения where?
Например:
tblcomponent
:
| pk_szid | xmldata |
+---------+----------------+
| a1 | xmldata |
| a2 | xmldata |
| a3 | xmldata |
tblprofile
:
| pk_szid | xmldata |
+---------+----------------+
| b1 | xmldata | // contains a1
| b2 | xmldata | // does not contain any of tblcomponent.pk_szid
Здесь xmldata записи 'b1' содержит tblcomponent.pk_szid.Когда я даю 'a1', результат для вышеупомянутого запроса будет:
| pk_szid | xmldata | pk_szid | xmldata |
+--------------+-------------+--------------+--------------+
| a1 | xmldata | b1 | xmldata |
Когда я даю 'a2',
| pk_szid | xmldata | pk_szid | xmldata |
+--------------+-------------+--------------+--------------+
Я хочу что-то вроде,
| pk_szid | xmldata | pk_szid | xmldata |
+--------------+-------------+--------------+--------------+
| a2 | xmldata | | |
Как получить это из subquery1
?