2016-09-14 140 views
0

美好的一天,每個人!學說CASE WHEN與WHERE IN語句

我有以下原則查詢檢索某些CTI實體:

SELECT s.id 
FROM CRM\SpendBundle\Entity\Spend s 
WHERE (CASE 
     WHEN s INSTANCE OF 'CRM\BusinessTripBundle\Entity\BusinessTrip' THEN 'Business Trip' 
     WHEN s INSTANCE OF 'CRM\ExpenseRequestBundle\Entity\ExpenseRequest' THEN 'Expense Request' 
     ELSE '' END) IN(:availableSpends) 

參數availableSpends只是一個字符串數組:

availableSpends = array('Expense Request') 

而且這個查詢將引發一個錯誤:

[Syntax Error] line 0, col 439: Error: Expected =, <, <=, <>, >, >=, !=, got 'IN' 

如何使用CASE語句來避免此錯誤?學說版本2.5.1

+0

你已經盡力了,只是爲了測試目的,與QueryBuilder的? '($ qb - > where('c INSTANCE OF:param') - > setParameter('param',$ em-> getClassMetadata('My \ Entity \ Class'))'''qb-> expr() - > in('u.id',array(1,2,3))' – Delphine

+0

也許它缺少你的「CASE結果」的別名? – Delphine

+0

或..在你的「SELECT」中添加一個別名並嘗試在這個別名上應用你的「WHERE過濾器」。不知道它是否會工作,我無法測試 – Delphine

回答

0

您可以改寫的情況下,它不與你類似下面的工作聲明:

SELECT s.id 
FROM CRM\SpendBundle\Entity\Spend s 
WHERE (s INSTANCE OF 'CRM\BusinessTripBundle\Entity\BusinessTrip' and 'Business Trip' IN (:availableSpends)) 
    or (s INSTANCE OF 'CRM\ExpenseRequestBundle\Entity\ExpenseRequest' and 'Expense Request' IN (:availableSpends))