2016-09-14 141 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))