我们的CRM软件具有关系功能,可让您定义两个联系人之间的关系。联系人存储在CONTACT
表中,关系存储在CONTACT_CONTACT
。
我们将医生联系人与患者联系人联系起来。在CONTACT_CONTACT
表格中有CONTACTID1
,CONTACTID2
,CONTACT1_ROLE
和CONTACT2_ROLE
。
我们使用ClientID在CONTACT
表中查询初始CONTACT
。然后我们使用CONTACTID
进行表连接。这里的问题是我们的CONTACTID
可能位于CONTACT_CONTACT.CONTACTID1
或CONTACT_CONTACT.CONTACTID2
列。
SELECT c2.CONTACT,
c2.ClientID,
c2.CONTACTID
FROM CONTACT as c
INNER JOIN CONTACT_CONTACT as cc on c.CONTACTID = cc.CONTACTID2
INNER JOIN CONTACT as c2 on cc.CONTACTID1 = c2.CONTACTID
WHERE c.ClientID = 121695 AND (cc.CONTACT1_ROLE = 'Doctor' OR cc.CONTACT2_ROLE = 'Doctor')
与CONTACT
中列出的博士角色联系回到CONTACT_CONTACT
表格时遇到同样的问题。
如果联系人或医生可以在CONTACT_CONTACT.CONTACTID1
或CONTACTID2
,那么在没有更改数据库表的可能性的情况下,最好的方法是什么?
答案 0 :(得分:0)
COALESCE
应该有效。但是,如果两个字段都有值,则连接将在您首先在括号中列出的字段上执行。
SELECT c.CONTACT,
c.ClientID,
c.CONTACTID
FROM CONTACT as c
INNER JOIN CONTACT_CONTACT as cc on c.CONTACTID = COALESCE(cc.CONTACTID1,cc.CONTACTID2)
WHERE c.ClientID = 121695 AND (cc.CONTACT1_ROLE = 'Doctor' OR cc.CONTACT2_ROLE = 'Doctor')
答案 1 :(得分:0)
你不能做两次查询吗?还有其他方法可以确定,但这应该得到我认为的信息:
SELECT c.CONTACT,
c.ClientID,
c.CONTACTID
FROM CONTACT as c
INNER JOIN CONTACT_CONTACT as cc on c.CONTACTID = cc.CONTACTID1
INNER JOIN CONTACT as c2 on cc.CONTACTID2 = c2.CONTACTID
WHERE c.ClientID = 121695
AND cc.CONTACT1_ROLE = 'Doctor'
union
SELECT c2.CONTACT,
c2.ClientID,
c2.CONTACTID
FROM CONTACT as c
INNER JOIN CONTACT_CONTACT as cc on c.CONTACTID = cc.CONTACTID2
INNER JOIN CONTACT as c2 on cc.CONTACTID1 = c2.CONTACTID
WHERE c.ClientID = 121695
AND cc.CONTACT2_ROLE = 'Doctor'
我不清楚您希望/尝试从查询中获取哪些信息,因为您只从一张表中选择了数据。