SELECT * FROM T1,T2
WHERE ((T1.DATE>=2020 AND T1.ID = T2.ID) OR
(T1.DATE < 2020 AND T1.NAME=T2.NAME(+) AND T1.AGE = T2.AGE(+) AND T1.GENDER=T2.GENDER(+)))
就是说 2020 年以后的数据 直接 ID 匹配
2020 以前的数据 用具体的信息匹配
关键是还要做左外连接,但是左外连接不能和 OR 用在一起。
请问下大家 要实现这样的需求该怎么写?
谢谢回复
1
insert000 2020 年 4 月 30 日 via iPhone
业务上实现,执行不同的 sql
|
2
xizismile 2020 年 4 月 30 日 via Android
楼上+1,建议业务上来实现。2020 以前的写一个 sql,2020 以后的写一个 sql,然后业务端去做聚合。都写到一个 sql 里,即使能写出来,那也是非常复杂的,后续迭代维护相当困难
|
3
liyanggyang 2020 年 4 月 30 日
楼上+1, 代码中实现业务。
再不济就$也是在代码中写动态 sql (不建议) |
4
tankren 2020 年 4 月 30 日
分开写啊
|
5
hanyingsen 2020 年 4 月 30 日
union all
|
6
sambawy 2020 年 4 月 30 日
SQL 不要写太复杂 增加维护难度
|
7
superrichman 2020 年 4 月 30 日
可以尝试用 where case when
|
8
crist 2020 年 4 月 30 日
if sql else sql
|
9
wangyanrui 2020 年 4 月 30 日
真心建议代码里面处理,不然后续接手的人肯定喷你(手动狗头)
来此一个曾经给人填过这种坑,并且骂骂咧咧的码农 |
10
Kylinsun 2020 年 4 月 30 日 via iPhone
根据业务拼接好 sql,写好注释
|
11
hbolive 2020 年 4 月 30 日
看到这个帖子,想起以前一个同事,以写复杂 SQL 代码为荣,能一句搞定的绝不两句,不管这个 SQL 多长。。
|