查询oracle中缺少右括号错误

时间:2014-05-18 10:56:39

标签: oracle

需要表格

习惯(conditionId,name)

患者(患者名称,姓名,性别,DoB,地址,州,邮编,家庭电话,商家电话,婚姻状况,职业,持续时间,单位,种族,注册日期,GPNo,NaturopathNo)

PatientMetabolic (functionNo,patientId,score)

问题 -

问题 - 显示吸烟患者的详细信息(即姓名,性别,地址,邮政编码,DOB),并且具有最高(最严重)的代谢功能。

(烟雾的conditionid是Habit表中的H1) (代谢功能在患者代谢表功能中) (为了找到最严重的代谢功能,我们需要创建一个分数总和,告诉谁具有最多的代谢功能)

我的查询 -

SELECT * 
FROM patient 
where patientid IN (SELECT patientid,SUM(score) as totalscore 
                    from PATIENTMETABOLIC 
                    where patientid IN (SELECT patientid 
                                        from patienthabit 
                                        where conditionid = 'H1') 
                    group by patientid 
                    order by totalscore desc);

错误:

  

ORA-00907:缺少右括号

3 个答案:

答案 0 :(得分:2)

执行此操作的另一种方法是使用联接。

select * from  (select  p.patientid,p.name,sum(pm.score) as total from patient p join patienthabit ph on p.patientid = ph.patientid
  and ph.conditionid = 'H1' Left join patientmetabolic pm 
  on p.patientid = pm.patientid  group by  p.patientid,p.name order by 3 desc) where ROWNUM = 1;

答案 1 :(得分:1)

试试这个:

SELECT *
  FROM PATIENT
  WHERE PATIENTID = (SELECT PATIENTID
                       FROM (SELECT patientid, SUM(score)
                               from PATIENTMETABOLIC 
                               where patientid IN (SELECT patientid
                                                     from patienthabit 
                                                     where conditionid = 'H1') 
                               group by patientid 
                               order by SUM(score) desc)
                       WHERE ROWNUM = 1);

SQLFiddle here

分享并享受。

答案 2 :(得分:0)

由于第一个内部查询返回patientid和totalscore,因此您无法将其用作针对IN运算符的列表。

此查询的结果可能类似于查询的结果:

SELECT p.* 
FROM patient p JOIN
     patienthabit ph ON p.patientid=ph.patientid
WHERE ph.conditionid='H1'