Sql 当子查询未引入EXISTS时,只能在选择列表中指定一个表达式

Sql 当子查询未引入EXISTS时,只能在选择列表中指定一个表达式,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,你能告诉我这个问题出了什么问题吗 为什么它会通过错误: “当 子查询未与EXISTS一起引入。“ 您必须在谓词中使用,而不是=,以防您必须比较WHERE子句返回的多个值,因此在查询中,而不是 (SELECT Dbo.DecryptString(LastName) + '', '' + Dbo.DecryptString(FirstName) as PatientName FROM Persons.Informations WHERE PersonId = (SELECT P

你能告诉我这个问题出了什么问题吗

为什么它会通过错误:

“当 子查询未与EXISTS一起引入。“


您必须在谓词中使用
,而不是
=
,以防您必须比较
WHERE
子句返回的多个值,因此在查询中,而不是

(SELECT 
   Dbo.DecryptString(LastName) + '', '' +
   Dbo.DecryptString(FirstName) as PatientName 
 FROM Persons.Informations 
 WHERE PersonId = (SELECT PersonId 
                   FROM Patients.Informations 
                   WHERE PatientId = TST.PatientId))
From Transactions.SessionTransaction TST ON TST.PaymentId = TP.PaymentId
请尝试以下方法:

  WHERE PersonId = (SELECT PersonId 
                       FROM Patients.Informations 
                       WHERE PatientId = TST.PatientId)
但是,您可以直接
联接
表,而不是在
中使用此谓词
,如下所示:

  ...
  WHERE PersonId IN (SELECT PersonId 
                       FROM Patients.Informations 
                       WHERE PatientId = TST.PatientId)
  ...

如果您试图将姓和名组合在一起,并用逗号分隔,则引号太多:

SELECT 
   ...
FROM Persons.Informations i
INNER JOIN Transactions.SessionTransaction TST ON i.PersonId = TST.PersonId
INNER JOIN ... TP ON TST.PaymentId = TP.PaymentId
您的原始查询试图返回两列—姓氏加上一个空字符串(实际上是no-op),而名字加上一个空字符串(同样,实际上是no-op)

(SELECT 
   Dbo.DecryptString(LastName) + ', ' +
   Dbo.DecryptString(FirstName) as PatientName 
 FROM Persons.Informations 
 WHERE PersonId = (SELECT PersonId 
                   FROM Patients.Informations 
                   WHERE PatientId = TST.PatientId))
From Transactions.SessionTransaction TST ON TST.PaymentId = TP.PaymentId