
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 多长。。 |