2017-05-20 17 views
0

私は、渡された値を含んでいる最初の、姓または中間名のEmployeeIdをフェッチしようとしています。Like in Subqueryの使い方は?

これは私のコードです。

if(context.testCase.getPropertyValue("KeyName") == "employee_name") 
{ 
if(context.testCase.getPropertyValue("SearchType") == "Alert"){ 
key = context.testCase.getPropertyValue("PassedValue") 
if(context.testCase.getPropertyValue("Operator")=="Contains"){ 
def res = sql.rows("SELECT AlertID FROM AlertEmployeeRel where EmployeeID=(Select ID from Employee where [FirstName] like '%$key%' or [LastName]='%$key%' or [MiddleName]='%$key%')") 
log.info(res.AlertID) 
context.testCase.setPropertyValue("tempPassedValue",res.AlertID.toString()) 
} 

これは、いずれかが、私はサブクエリで同様の使用方法を知らせることができ、エラー

Only one expression can be specified in the select list when the subquery is not introduced with EXISTS. 

次入門..動作していないのですか?

+0

あなたのコードはどれですか?このエラーは、ここの単一の照会と一致しません。 – Donnie

答えて

2

問題はLIKEとは関係ありません。 IN代わりの=を使用します。

SELECT aerAlertID 
FROM AlertEmployeeRel aer 
WHERE aer.EmployeeID IN (Select e.ID 
          FROM Employee e 
          WHERE e.FirstName like '%$key%' or e.LastName = '%$key%' or e.MiddleName = '%$key%' 
         ); 
+0

次のエラーの取得 "メッセージ116、レベル16、状態1、行13 EXISTSでサブクエリが導入されていない場合は、選択リストに1つの式しか指定できません。 – ChanGan

+0

@ ChanGan。 。 。私はエラーを理解していない。 * SELECT *リストには1つの式しかありません。 –

+0

これはエラーではなく、「サブクエリは1行以上を返します」という問題を修正しました。 – Donnie

0

パフォーマンスが懸念される場合は、EXISTS演算子を使用することができます。 EXISTSは、多くのデータを扱うときに最初に一致した値の検索を停止するので、一般にINより効率的です。また、LastNameとMiddleNameにはlike演算子も使用してください。

SELECT aerAlertID 
FROM AlertEmployeeRel aer 
WHERE aer.EmployeeID EXISTS (SELECT * 
         FROM Employee e 
         WHERE e.ID = aer.EmployeeID 
         AND (e.FirstName like '%$key%' 
         OR e.LastName like '%$key%' 
         OR e.MiddleName like '%$key%') 
        );