oracle 写sql 两表关联查询,关联条件为a.gsbh = b.gsbh and a.month = b.month,但是存在有一些gsbh关联不上的数据,这时就按照month关联
时间: 2024-02-05 22:10:31 浏览: 155
可以左连接(left join)和子查询(subquery)来实现。以下是两种方法的示例:
1. 左连接方法
```
SELECT a.*, b.*
FROM table_a a
LEFT JOIN table_b b ON a.gsbh = b.gsbh AND a.month = b.month
WHERE b.gsbh IS NULL OR b.month IS NULL
UNION ALL
SELECT a.*, b.*
FROM table_a a
LEFT JOIN table_b b ON a.month = b.month
WHERE a.gsbh NOT IN (SELECT gsbh FROM table_b)
```
2. 子查询方法
```
SELECT a.*, b.*
FROM table_a a
LEFT JOIN (
SELECT gsbh, month, MAX(col) as col
FROM table_b
GROUP BY gsbh, month
) b ON a.gsbh = b.gsbh AND a.month = b.month
WHERE (a.gsbh = b.gsbh AND a.month = b.month) OR (a.gsbh NOT IN (SELECT gsbh FROM table_b) AND a.month = b.month)
```
相关问题
oracle 写sql 先按gsbh关联,gsbh关联不上的再按month字段关联
可以使用左连接(LEFT JOIN)和IS NULL语句实现这个需求。
示例SQL语句如下:
```
SELECT *
FROM table1 t1
LEFT JOIN table2 t2 ON t1.gsbh = t2.gsbh
WHERE t1.month = '202101' AND t2.gsbh IS NULL
UNION ALL
SELECT *
FROM table1 t1
LEFT JOIN table2 t2 ON t1.gsbh = t2.gsbh
WHERE t1.month <> '202101' AND t2.gsbh IS NOT NULL
```
第一个SELECT语句表示先按照gsbh关联,找出table1中月份为'202101',但是在table2中找不到对应记录的数据。
第二个SELECT语句表示按照gsbh关联不上的记录,再按照month字段关联,找出table1中月份不为'202101',但是在table2中能够找到对应记录的数据。
最后使用UNION ALL将两个结果集合并起来即可。
阅读全文