PostgreSQL Регистрация с особыми условиями - PullRequest
0 голосов
/ 09 марта 2020

Предположим, у нас есть следующая таблица1:

1 2 3
a x m
a y m
b z m

Я хочу выполнить внутреннее объединение таблицы

INNER JOIN tabel2 ON table1.2 = table2.2

Как-то так, но дополнительно условие, что значение таблицы 1.1 не уникальны. Таким образом, в таблице 1.1 = b в этом примере не будет внутреннего соединения.

Каков наилучший способ достичь этого?

1 Ответ

1 голос
/ 09 марта 2020

Использование агрегата в подзапросе - вот как я бы это сделал

SELECT *
FROM table1 
JOIN table2
ON table1."2" = table2."2"
JOIN (
    SELECT "1" 
    FROM table1 
    GROUP BY "1"
    HAVING COUNT(*) > 1
    ) AS sub_q
ON sub_q."1" = table1."1";

Другой вариант может быть cte или временной таблицей для хранения строк, к которым вы присоединяетесь

WITH _cte AS 
(
SELECT "1"
FROM table1 
GROUP BY "1"
HAVING COUNT(*) > 1
)
SELECT *
FROM table1 
JOIN table2
ON table1."2" = table2."2"
JOIN _cte AS cte
ON cte."1" = table1."1";

временная таблица:

CREATE TEMPORARY TABLE _tab
(
"1" varchar
);

INSERT INTO _tab
SELECT "1"
FROM table1 
GROUP BY "1"
HAVING COUNT(*) > 1;

SELECT *
FROM table1 
JOIN table2
ON table1."2" = table2."2"
JOIN _tab AS tab
ON tab."1" = table1."1";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...