具体点举个例子
现在有表a跟表b
a里id有值‘none’跟空值null
我现在希望连接a里的‘none’跟null到b里userid=‘nobody’,这样可能吗?如果这个设置了,那用group by b.userid之后,count跟sum函数的值是正确的吗?
现在有表a跟表b
a里id有值‘none’跟空值null
我现在希望连接a里的‘none’跟null到b里userid=‘nobody’,这样可能吗?如果这个设置了,那用group by b.userid之后,count跟sum函数的值是正确的吗?
decode函数转化一下!
就是
select *
from a, b
where (a.id is null or a.id = 'none') and b.id = 'nobody'
2 SELECT 'none' ID FROM dual union ALL
3 SELECT 'none' ID FROM dual union ALL
4 SELECT NULL ID FROM dual union ALL
5 SELECT '0' ID FROM dual union ALL
6 SELECT '1' ID FROM dual
7 ),B AS(
8 SELECT 'nobody' userid FROM dual union ALL
9 SELECT 'nobody' userid FROM dual union ALL
10 SELECT 'nobodyabc' userid FROM dual
11 )SELECT A.ID,B.userid,B.cnt
12 FROM A,(SELECT userid,COUNT(1) cnt FROM B WHERE B.userid='nobody' GROUP BY userid) B
13 WHERE DECODE(A.id,'none','nobody',NULL,'nobody',NULL) = B.userid;ID USERID CNT
---- --------- ----------
none nobody 2
none nobody 2
nobody 2
SELECT *
FROM A,B
WHERE B.USERID = 'nobody'
AND (A.ID is null or A.ID = 'none')
在表B中nobody只有一条记录的情况下,可以使用上面的代码,否则需要增加关连条件。
关连后count或者sum不再正确,因为B中的nobody变成了多条重复的记录。