我试过这个
select case when exists (select * from rnr.company_faqs fo where fo.mp_company_uid=734)
then select * from rnr.company_faqs fo where fo.mp_company_uid=734
else select * from rnr.faq_master
end
我收到错误
ERROR: syntax error at or near "select"
LINE 2: then select * from rnr.company_faqs fo where fo.mp...
^
****** 错误 ******
ERROR: syntax error at or near "select"
SQL state: 42601
Character: 105
答案 0 :(得分:0)
使用开括号SELECT
{<1}}简单地打包()
:
select
case
when exists (select * from rnr.company_faqs fo where fo.mp_company_uid=734) then
(select * from rnr.company_faqs fo where fo.mp_company_uid = 734)
else
(select * from rnr.faq_master)
end
当您尝试手动编写时,您将拥有如下脚本:
select select * from rnr.company_faqs fo where fo.mp_company_uid = 734
这确实会给你一个错误。
但如果你用()
包裹它:
select (select * from rnr.company_faqs fo where fo.mp_company_uid = 734)
它会使脚本正确。
答案 1 :(得分:0)
这里的问题是,您只能使用CASE WHEN标量数据,但SELECT *
返回行集。使用UNION尝试此操作:
select * from rnr.company_faqs fo where fo.mp_company_uid=734
UNION ALL
select * from rnr.faq_master
WHERE NOT EXISTS(select *
from rnr.company_faqs fo
where fo.mp_company_uid=734)
答案 2 :(得分:-1)
如果表rnr.company_faqs和rnr.faq_master中的结果集列相同。
你应该尝试&#34; UNION&#34;选择数据
Select * from (
select * from rnr.company_faqs fo where fo.mp_company_uid=734
UNION
select * from rnr.faq_master
) a;
如果rnr.company_faqs有结果集,它将给出一行,否则返回null;
UNION结果集将是交集。
您可以修改查询以获得所需的结果集。
希望它有所帮助!