sql加上在不同的表中搜索

时间:2013-11-03 06:39:14

标签: sql database oracle

我有这两张桌子。我要做的是找出申请的职位编号,职位和总数。

 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;

1 个答案:

答案 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