SQL - 合并不按预期工作(或希望!)

时间:2015-11-10 14:58:35

标签: sql

我试图使用合并,但显然是误解了一些东西。在下面的代码中,第一个之后的代码(包括paren) - 直到'= en.personID)st)'给出了预期的不同stateID的列表。但是当我运行整个代码时,我收到一个错误:关键字'where'附近的Incorect语法。谁能看到我做错了什么?你能在coalesce中使用select / subquery吗?谢谢!

select c.endYear
,coalesce(s.stateID, select st.stateID
                    from (select distinct st.stateID 
                            from (select st.stateID
                                      ,st.personID
                                  from student st
                                  left join enrollment en on       st.personID = en.personID) st)
                    where s.personID =   st.personID)                                 
, s.lastname
, s.firstname . . . .

1 个答案:

答案 0 :(得分:1)

子查询需要用括号括起来。可能还有其他问题。这个版本应解析:

select . . .
       coalesce(s.stateID,
                (select distinct st.stateID
                 from student st left join
                      enrollment en
                      on st.personID = en.personID
                  where s.personID = st.personID
                )),                              

如果子查询返回多行,这可能仍会生成运行时错误。然后你必须选择哪个州。一般方法是使用聚合函数:

select . . .
       coalesce(s.stateID,
                (select max(st.stateID)
                 from student st left join
                      enrollment en
                      on st.personID = en.personID
                  where s.personID = st.personID
                )),  

或者,您可以使用fetch first 1 row onlytoplimit或类似内容拉一行。