左联接两个表-不包括联接,其中第二个表的第一个表的值多于一行;拒绝

时间:2018-07-21 13:43:03

标签: postgresql

正如标题所说,我想拒绝行,所以我不会创建重复项。 第一步是不要联接第二个表中具有更多行的值。

如果需要,这里是一个示例: 表a:

aa |bb  |
---|----|
1  |111 |
2  |222 |

表h:

hh |kk  |
---|----|
1  |111 |
2  |111 |
3  |222 |

使用普通左联接:

SELECT
    *
FROM a
LEFT JOIN h
ON a.bb = h.kk
;

我得到:

aa |bb  |hh |kk  |
---|----|---|----|
1  |111 |1  |111 |
1  |111 |2  |111 |
2  |222 |3  |222 |

我想摆脱前两行,其中aa = 1。

...

第二步是针对另一个查询,可能在某些情况下,表a在哪里,我将仅过滤表b中多于2行的那些行。 因此,我想创建表c,其中将有:

aa |bb  |
---|----|
1  |111 |

有人可以帮我吗? 谢谢。

1 个答案:

答案 0 :(得分:0)

仅获得1:1联接

SELECT a.aa,h.hh,h.kk FROM a
LEFT JOIN h ON a.bb = h.kk
GROUP BY bb HAVING COUNT(kk)=1

仅获得1:n个加入

SELECT a.aa,h.hh,h.kk FROM a
LEFT JOIN h ON a.bb = h.kk
GROUP BY bb HAVING COUNT(kk)>1