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-04-30 09:56:54 +08:00 via iPhone
业务上实现,执行不同的 sql
|
2
xizismile 2020-04-30 10:03:57 +08:00 via Android
楼上+1,建议业务上来实现。2020 以前的写一个 sql,2020 以后的写一个 sql,然后业务端去做聚合。都写到一个 sql 里,即使能写出来,那也是非常复杂的,后续迭代维护相当困难
|
3
liyanggyang 2020-04-30 10:08:41 +08:00
楼上+1, 代码中实现业务。
再不济就$也是在代码中写动态 sql (不建议) |
4
tankren 2020-04-30 10:21:59 +08:00
分开写啊
|
5
hanyingsen 2020-04-30 10:23:22 +08:00
union all
|
6
sambawy 2020-04-30 10:27:55 +08:00
SQL 不要写太复杂 增加维护难度
|
7
superrichman 2020-04-30 10:30:02 +08:00
可以尝试用 where case when
|
8
crist 2020-04-30 10:31:31 +08:00
if sql else sql
|
9
wangyanrui 2020-04-30 10:34:33 +08:00
真心建议代码里面处理,不然后续接手的人肯定喷你(手动狗头)
来此一个曾经给人填过这种坑,并且骂骂咧咧的码农 |
10
Kylinsun 2020-04-30 10:39:04 +08:00 via iPhone
根据业务拼接好 sql,写好注释
|
11
hbolive 2020-04-30 10:56:42 +08:00
看到这个帖子,想起以前一个同事,以写复杂 SQL 代码为荣,能一句搞定的绝不两句,不管这个 SQL 多长。。
|