如何在具有相同表的查询的条件下选择查询

时间:2014-06-09 09:32:31

标签: sql postgresql

我试过这个

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

3 个答案:

答案 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结果集将是交集。

您可以修改查询以获得所需的结果集。

希望它有所帮助!