我需要在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]
答案 0 :(得分:0)
我会这样做 - 我会加入POA联系信息,部分联接检查45的代码ID - 因此如果代码id不是45,它将为null。然后我只是使用COALESCE提供所需的价值。您没有提供有关数据模型的大量信息,但它应如下所示:
不需要
IF
或CASE
- 它都内置于连接的过滤器中,所有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