mysql - 仅匹配右表中的一条记录时如何左连接
问题描述
我想知道当只匹配右表中的一条记录时如何左连接。
例如,
表A
ID | 价值 |
---|---|
1 | 34 |
2 | 42 |
3 | 60 |
表B
ID | 价值 | 表A_id |
---|---|---|
1 | 20 | 1 |
2 | 31 | 1 |
3 | 50 | 2 |
我想得到如下使用的结果left outer join
。
表A_id | 表A_value | 表B_值 |
---|---|---|
1 | 34 | 无效的 |
2 | 42 | 50 |
3 | 60 | 无效的 |
第一行的 tableB_value 为空,因为tableA.id = tableB.tableA_id
匹配多条记录。
如何解决?谢谢。
解决方案
您可以将其COUNT()
用作分析函数来跟踪 atableA_id
在 A 表中出现的次数:
SELECT a.id AS tableA_id, a.value AS tableA_value, b.value AS tableB_value
FROM tableA a
LEFT JOIN
(
SELECT *, COUNT(*) OVER (PARTITION BY tableA_id) cnt
FROM tableB
) b
ON a.id = b.tableA_id AND b.cnt = 1
ORDER BY a.id;