左联接两个表-不包括第二个表中第一个表的值超过1行的联接;拒绝



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

如果需要,下面是一个示例:表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: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

最新更新