2013-01-22 46 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

相关问题