在where子句中包含IF

时间:2017-03-13 14:56:05

标签: sql if-statement where clause

我需要在where子句中包含一个IF或CASE语句,它会给我一个依赖于db中数据的记录。

我想要做的是选择在relation_code_id中具有特定代码的某个联系人,以表明他们已被分配POA(代码为45)。如果联系人没有POA,则显示主联系人(main_contact = 1)。但是,任何拥有POA的联系人都优先于主要联系人。因此,如果Joe Bloggs被分配了主要联系人,但是Anne Nickols被分配了POA,那么节目安妮就不是Joe。

(此信息包含在TNTGROUP表中)

无论如何我能做到吗?

道歉,如果这没有意义。

这是我的代码:

$scope.refDataSelected = refData[0]

1 个答案:

答案 0 :(得分:0)

我会这样做 - 我会加入POA联系信息,部分联接检查45的代码ID - 因此如果代码id不是45,它将为null。然后我只是使用COALESCE提供所需的价值。您没有提供有关数据模型的大量信息,但它应如下所示:

  

不需要IFCASE - 它都内置于连接的过滤器中,所有SQL平台都经过优化以进行评估。

SELECT 
  -- blah blah blah.. current select
  -- TNTGROUP won't be null if relationship code is 45
  COALESCE(TNTGROUP.CONTACT_INFO,a_table.main_contact) as Contact
FROM a_table
LEFT JOIN TNTGROUP ON 
   -- How TNTGROUP joins to a_table (which you don't say)
   a_table.id = TNTGROUP.id
   -- Only if valid
   AND TNTGROUP.relationship_code_id = 45