我有这两张桌子。我要做的是找出申请的职位编号,职位和总数。
CREATE TABLE POSITION (
posNum varchar2(10) not null,
posTitle varchar2(70),
posOfferedBy varchar2(70),
);
CREATE TABLE APPLICATION (
appcnPosNum varchar2(10) not null
);
当我执行此操作时,它显示所有位置的应用程序的数量。即使是那些没有申请的职位,计数显示仍然显示为1.请引导我。谢谢。我正在使用oracle数据库11g
SELECT posNum, posTitle,count(*)
FROM position
FULL OUTER JOIN application on position.posNum = application.appcnPosNum
GROUP BY posNum, posTitle;
答案 0 :(得分:0)
select * from application;
APPCNPOSNU
----------
1
2
25
1
select * from position;
POSNUM POSTITLE POSOFFERED
---------- ---------- ----------
1 title1 pos1
2 title2 pos2
1 title1 pos3
3 title3 pos4
完整的外连接将从两个表中获取所有行 除非您在应用程序表中有重复项并且您的应用程序没有位置
,否则应该是不同的SELECT posNum, posTitle,count(distinct application.appcnPosNum) ct
FROM position
FULL OUTER JOIN application on position.posNum = application.appcnPosNum
GROUP BY posNum, posTitle;
POSNUM POSTITLE CT
---------- ---------- ----------
null null 1
3 title3 0
1 title1 1
2 title2 1
我更喜欢做一个左连接,它检索所有位置(左表中的行),并将所有未在第二个中找到的应用程序替换为null。全部取决于这两个表之间的约束。
SELECT posNum, posTitle,count(appcnPosNum)
FROM position
LEFT OUTER JOIN (select distinct appcnPosNum from application )app
on position.posNum= app.appcnPosNum
GROUP BY posNum, posTitle;
POSNUM POSTITLE COUNT(APPCNPOSNUM)
---------- ---------- ------------------
3 title3 0
1 title1 2
2 title2 1