我输入以下内容:
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似乎不同意的问题,是否有任何想法可以绕过这个问题?
答案 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
);