我的数据库表:
//TABLE1
tname
-----------
brazil
spain
england
在我的表2中:
//Table2
title date
-------------------------
test1 15-jun-2012
test2 16-jun-2012
test3 14-AUG-2011
在我的表3中:
//Table3
Tname title
------------------
brazil test1
brazil test2
spain test3
我的问题是找到自2012年以来发生的tname,即2012年1月1日
所以我的查询是
select tname,
NVL(count(*),0) as total
from table1 t1
inner join table3 t3
on t1.tname = t3.tname
inner join table2 t2
on t3.title = t2.title
where (TO_CHAR(date,'yyyy-mm-dd') > '2012-01-01');
预期产出:
//result
tname total
-------------------
brazil 2
spain 0
england 0
答案 0 :(得分:2)
您需要group by
子句:
select tname, NVL(count(*),0) as total
from table1 t1 inner join
table3 t3
on t1.tname = t3.tname inner join
table2 t2
on t3.title = t2.title
where (TO_CHAR(date,'yyyy-mm-dd') > '2012-01-01')
group by tname;
这假定查询的其余部分是正确的。
答案 1 :(得分:0)
日期的字符串比较通常不会产生您真正想要的结果。 并且需要group by或者应该返回oracle的语法错误。
SELECT tname,NVL(count(*),0) as total
FROM table1 t1
INNER JOIN table3 t3
on t1.tname = t3.tname
inner join table2 t2
on t3.title = t2.title
where date > to_date('2012-01-01','yyyy-mm-dd')
GROUP BY tname;