2013-01-22 114 views
0

我有這個中等大小的查詢,並且遇到了某些問題獲取某些字段。如果..其他值爲空,則將一些值設置爲NULL

SELECT DISTINCT 
    enc.id, enc.cus_id, enc.createdon, enc.status, 
    enc.segment, enc.currentstep, enc.groupid, enc.fdprotocol, 
    enc_task.linkfile, cus.fname, cus.lname, login.first_name, 
    login.last_name, login.username, login.user_code, fp.protocol 
FROM 
    mob_encounters_task enc_task, mob_encounters enc, 
    mob_customer cus, mob_login login, mob_protocol_type fp 
WHERE 
    enc.id=enc_task.encounterid 
AND 
    cus.id=enc_task.cus_id 
AND 
    login.id=enc.createdby 
GROUP BY enc.id 

fp.protocol是一個字符串,以及在表FP最多有5或6個 「協議」。

我想要做的是,如果enc.fdprotocol爲空,則fp.protocol應該是空的,否則得到fp.protocol關聯到fp.id = enc.fdprotocol

請讓我知道這聽起來有點混亂,我一直停留在這一段時間

+0

你有表的一大堆加入這裏,但只兩者之間的連接條件。所有這些表格如何關聯? (你要求的是一個左連接,但很難找到它的位置以及所有這些表的實際必要條件() –

回答

1

我發現,使用實際的JOIN語法,使查詢更具可讀性和可維護性。在這種情況下,你需要使用一個LEFT JOIN,你必須改變你的語法爲:

SELECT enc.id, enc.cus_id, enc.createdon, enc.status, enc.segment, 
enc.currentstep, enc.groupid, enc.fdprotocol, enc_task.linkfile, cus.fname, 
cus.lname, login.first_name, login.last_name, login.username, login.user_code, 
fp.protocol 
    FROM mob_encounters_task enc_task 
    JOIN mob_encounters enc ON enc.id=enc_task.encounterid 
    JOIN mob_customer cus ON cus.id=enc_task.cus_id 
    JOIN mob_login login ON login.id=enc.createdby 
    LEFT JOIN mob_protocol_type fp ON fp.id = enc.fdprotocol 

此外,我不相信你需要DISTINCT

+0

謝謝!最後!幾乎用完了頭髮。數據庫佈局是一團糟,但不幸的是現在重新設計它不是一個選項 我不得不刪除連接上的逗號,但一切工作完美謝謝! – Cornwell

+0

哎呀...是的,我複製並粘貼你的原始和忘了擺脫逗號,很高興我能幫上忙。 – Cfreak

相關問題