2012-03-12 3 views
0

SO, возможно, структура данных ошибочна с самого начала, но .. Мне нужно выполнить соединение на двух таблицах, но мне нужно сделать это на основе конкатенации из 2 столбцов sin второй таблицы ,Outer Join Based On Concatenated SELECT

Например, таблица один

title | key 
-------+------- 
foo | Bar1 

стол два

subcat | pt1 | pt2 
--------+-----+----- 
kitty | Bar | 1 

я в основном нужно использовать pt1 + pt2 в сочетании в качестве внешнего ключа.

Это в значительной степени академический, поскольку я могу добавить столбец в набор данных (а не мое первоначальное творение), что является конкатенацией, однако я хотел знать, возможно ли это.

Postgres версия 8.4.8

cheers.bo

ответ

1

условия соединения может быть в значительной степени любое выражение; в частности, вы можете включить конкатенацию строк:

select ... 
from t1 left outer join t2 on t1.key = t2.pt1 || t2.pt2 
where ... 
+0

't2.pt1 || t2.pt2' не соответствовало бы ни «Бар», ни «1»? – roberthuttinger

+3

@roberthuttinger: Нет, '||' является стандартным оператором конкатенации строки SQL, а не логическим или: http://www.postgresql.org/docs/current/interactive/functions-string.html#FUNCTIONS-STRING- SQL –

+0

:: ptf :: duh, это, кажется, самый чистый метод, спасибо! – roberthuttinger

1

Вы всегда можете создать вложенный запрос и выполнить объединение против подзапроса:

SELECT t1.foo, t1.key, t3.subcat FROM table1 
JOIN (SELECT t2.pt1 || t2.pt2 AS ptjoined, t2.subcat 
     FROM tabletwo AS t2) as t3 
ON t3.ptjoined = t1.key 
+0

Я тоже думал об этих строках ... конкатенация гораздо более прямая. благодаря! – roberthuttinger