簡體   English   中英

SQL在兩個不同的列上進行聯接

[英]SQL to JOIN on two different columns

我們的CRM軟件具有關聯功能,可讓您定義兩個聯系人之間的關聯。 聯系人存儲在CONTACT表中,關系存儲在CONTACT_CONTACT

我們將醫生聯系方式與患者聯系方式聯系起來。 CONTACT_CONTACT桌子上有CONTACTID1CONTACTID2CONTACT1_ROLECONTACT2_ROLE

我們使用ClientID在CONTACT表中查詢初始CONTACT 然后,我們使用CONTACTID進行表CONTACTID 這里的問題是我們擁有的CONTACTID可能位於CONTACT_CONTACT.CONTACTID1CONTACT_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.CONTACTID1CONTACTID2 ,那么在沒有可能更改數據庫表的情況下,最好的方法是什么?

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM