SQL Query,错误返回多行

时间:2017-07-19 20:18:21

标签: sql sql-server row

我输入以下内容:

SELECT
    APPL_ACAD_PROGRAM,
    APPL_START_TERM,
    APPL_APPLICANT,
    STC_TERM,
    STC_PERSON_ID
FROM 
    ODS_APPLICATIONS
JOIN 
    SPT_STUDENT_ACAD_CRED ON STC_PERSON_ID = APPL_APPLICANT
WHERE
    APPL_ACAD_PROGRAM = (
        SELECT 
            (APPL_ACAD_PROGRAM) 
        FROM ODS_APPLICATIONS
        WHERE APPL_START_TERM LIKE STC_TERM + '%'
        AND APPL_APPLICANT = STC_PERSON_ID
) 

我收到以下错误:

  

子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。

据我所知,这与我的嵌套查询有关,它提出了多条SQL似乎不同意的问题,是否有任何想法可以绕过这个问题?

3 个答案:

答案 0 :(得分:1)

=运算符仅允许您与单个值进行比较。您的查询返回多个值。您可以将查询更改为仅返回一个值,也可以更改运算符。

如果值与任何返回值匹配,in运算符将返回true。

您还可以使用=运算符修改all运算符。如果选择= all,则表达式返回true,如果该值与返回的所有值匹配。

您使用的解决方案完全取决于您希望实现的目标。我的猜测是你想要in

SELECT
APPL_ACAD_PROGRAM,
APPL_START_TERM,
APPL_APPLICANT,
STC_TERM,
STC_PERSON_ID

FROM ODS_APPLICATIONS
JOIN SPT_STUDENT_ACAD_CRED ON STC_PERSON_ID = APPL_APPLICANT

WHERE
APPL_ACAD_PROGRAM in (SELECT (APPL_ACAD_PROGRAM) FROM ODS_APPLICATIONS
WHERE APPL_START_TERM LIKE STC_TERM + '%'
AND APPL_APPLICANT = STC_PERSON_ID) 

答案 1 :(得分:1)

如果您只想查询子查询的第一个结果,则应该显示select top 1而不是select

如果您希望子查询返回多于1个结果,并且您的主查询要筛选多个结果,则可以将=替换为in,并将查询不需要更改。

答案 2 :(得分:0)

尝试将其重写为EXISTS ...

FROM 
    ODS_APPLICATIONS oa
    JOIN SPT_STUDENT_ACAD_CRED ssad
        ON oa.STC_PERSON_ID = ssad.APPL_APPLICANT
WHERE
    EXISTS (
            SELECT 1 
            FROM 
                ODS_APPLICATIONS oa2 
            WHERE 
                oa.APPL_ACAD_PROGRAM = oa2.APPL_ACAD_PROGRAM
                AND APPL_START_TERM LIKE STC_TERM + '%'
                AND APPL_APPLICANT = STC_PERSON_ID
                );