0

この中規模のクエリがあり、特定のフィールドの取得に問題があります。

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.id = enc.fdprotocolに関連付けられたfp.protocolを取得します。

これが紛らわしいと思われる場合はお知らせください。私はしばらくこれに固執しています

4

1 に答える 1

1

実際の JOIN 構文を使用すると、クエリがはるかに読みやすく、保守しやすくなることがわかりました。この場合、 a を使用する必要があり、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

于 2013-01-22T01:34:35.440 に答える