[英]SQL to JOIN on two different columns
我们的CRM软件具有关联功能,可让您定义两个联系人之间的关联。 联系人存储在CONTACT
表中,关系存储在CONTACT_CONTACT
。
我们将医生联系方式与患者联系方式联系起来。 在CONTACT_CONTACT
桌子上有CONTACTID1
, CONTACTID2
, CONTACT1_ROLE
和CONTACT2_ROLE
。
我们使用ClientID在CONTACT
表中查询初始CONTACT
。 然后,我们使用CONTACTID
进行表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
中列出的Doctor角色进行联系的同一个问题。
如果联系人或医生可以位于CONTACT_CONTACT.CONTACTID1
或CONTACTID2
,那么在没有可能更改数据库表的情况下,最好的方法是什么?
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')
您不能只两次查询吗? 还有其他方法可以确定,但这应该获得我认为的信息:
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'
我不清楚您希望/尝试从查询中获取什么信息,因为您仅从单个表的数据中进行选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.