0
(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

你能告诉我这个查询有什么问题吗?

为什么会通过错误:

“当不使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式。”

4

2 回答 2

0

如果您尝试将姓氏和名字组合在一起,用逗号分隔,则引号过多:

(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

您的原始查询试图返回两列 - 最后一个带有空字符串的姓氏(实际上是一个无操作),以及一个带有空字符串的名字(同样,实际上是一个无操作)。

于 2012-12-09T12:58:55.673 回答
0

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

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

试试这个:

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

但是,您可以JOIN直接使用表,而不是这个 predicate IN,如下所示:

SELECT 
   ...
FROM Persons.Informations i
INNER JOIN Transactions.SessionTransaction TST ON i.PersonId = TST.PersonId
INNER JOIN ... TP ON TST.PaymentId = TP.PaymentId
于 2012-12-09T08:23:53.187 回答