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で導入されていない場合、選択リストで指定できる式は1つだけです。」

4

2 に答える 2

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に、この述語の代わりにテーブルを直接指定できます。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 に答える
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

元のクエリは、2つの列を返そうとしています。最後の名前に空の文字列が追加され(事実上no-op)、名の名前に空の文字列が追加されています(これも事実上no-op)。

于 2012-12-09T12:58:55.673 に答える