新手SQL错误;缺失表达
这里是sql的新手 我正试图从下面的查询中返回sa_id,但遇到“缺少表达式”错误新手SQL错误;缺失表达,sql,oracle,Sql,Oracle,这里是sql的新手 我正试图从下面的查询中返回sa_id,但遇到“缺少表达式”错误 select s.sa_id from cisadm.ci_sa s where s.sa_status_flg = '20' and s.sa_type_cd = 'LEURIBIL' and s.sa_id in { select * from cisadm.ci_intv_pf pf where pf.intv_pf_typ_cd = 'S
select s.sa_id
from cisadm.ci_sa s
where s.sa_status_flg = '20'
and s.sa_type_cd = 'LEURIBIL'
and s.sa_id in {
select *
from cisadm.ci_intv_pf pf
where pf.intv_pf_typ_cd = 'SMPCHGRI'}
;
两个表中都存在sa_id;ci_sa和ci_intv_pf
我需要sa_id在ci_intv_pf表中有一张“SMPCHGRI”的intv_pf_type_cd。
我需要匹配的sa_id从ci_sa表中获得一张sa_类型的'LEURIBIL'cd
已尝试使用group by结束查询,但运气不佳
非常感谢的任何帮助只需在内部SQL中返回sa_id:
select s.sa_id
from cisadm.ci_sa s
where s.sa_status_flg = '20'
and s.sa_type_cd = 'LEURIBIL'
and s.sa_id in (
select pf.sa_id
from cisadm.ci_intv_pf pf
where pf.intv_pf_typ_cd = 'SMPCHGRI')
;
赞同PRDP,但是请考虑下面的代码,因为它读计数而不是值-< /P>
select s.sa_id
from cisadm.ci_sa s
where s.sa_status_flg = '20'
and s.sa_type_cd = 'LEURIBIL'
and exist (
select 1
from cisadm.ci_intv_pf pf
where pf.intv_pf_typ_cd = 'SMPCHGRI'
and s.sa_id = pf.sa_id
);
您可以在尝试回答问题时使用标准子查询
SELECT s.sa_id
FROM cisadm.ci_sa s
WHERE s.sa_status_flg = '20'
AND s.sa_type_cd = 'LEURIBIL'
AND s.sa_id IN (SELECT pf.sa_id
FROM cisadm.ci_intv_pf pf
WHERE pf.intv_pf_typ_cd = 'SMPCHGRI')
也可以使用EXISTS进行相关子查询:
SELECT s.sa_id
FROM cisadm.ci_sa s
WHERE s.sa_status_flg = '20'
AND s.sa_type_cd = 'LEURIBIL'
AND s.sa_id EXISTS (SELECT 1
FROM cisadm.ci_intv_pf pf
WHERE pf.intv_pf_typ_cd = 'SMPCHGRI'
AND pf.sa_id = s.sa_id)
然后使用WITH重构子查询,这可以使复杂查询更易于阅读
WITH sub_query AS
(SELECT 1
FROM cisadm.ci_intv_pf pf
WHERE pf.intv_pf_typ_cd = 'SMPCHGRI')
SELECT s.sa_id
FROM cisadm.ci_sa s
INNER JOIN
sub_query pf ON pf.sa_id = s.sa_id
WHERE s.sa_status_flg = '20'
AND s.sa_type_cd = 'LEURIBIL'
所有这些在效率上可能会有一些差异,这主要取决于表的相对大小,但Oracle在选择当今最有效的方法方面做得相当不错
警告:我还没有在select sa_id中设置表和数据来测试这些s.sa_id。。谢谢@Prdp这是一个括号问题,应该用括号!不仅仅是括号。在中使用时,不能选择多个列。在子菜单中单独选择sa_idquery@LiamC-下面有三个可能的答案。如果有人回答了您的问题,您可以将该答案标记为正确答案。@user7294900谢谢。我需要用括号而不是括号!它可以更快,但这取决于两个表之间的相对基数。很好地解释了这一点,我同意。