我有这个中等大小的查询,我在获取某些字段时遇到了一些问题。
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