4

別のテーブルのフィールドの値に基づいて、内部結合しているテーブルを条件付きで変更する方法はありますか?これが私がこれまでに得たものです(しかしそれはエラーです):

SELECT 
    j.jobID, j.jobNumber,
    CASE
        WHEN j.idType = 'dealership' THEN d.dealershipName
        WHEN j.idType = 'Group' THEN g.groupName
        WHEN j.idType = 'Agency' then a.agencyName
    END as dealershipName,
    CASE
        WHEN p.manualTimestamp != '0000-00-00 00:00:00' THEN UNIX_TIMESTAMP(p.manualTimestamp)
        WHEN p.manualTimestamp = '0000-00-00 00:00:00' THEN p.timestamp
    END as checkTS,
    CONCAT_WS(' ', ui.fName, ui.lName) as salesRep
FROM jobs j
LEFT JOIN dealerships d ON j.dealershipID = d.dealershipID
LEFT JOIN dealershipgroups g ON j.dealershipID = g.groupID
LEFT JOIN agencies a ON j.dealershipID = a.agencyID
INNER JOIN payments p ON j.jobID = p.jobID
IF j.idType = 'dealership' THEN 
    INNER JOIN smdealershipjoins smdj ON j.dealershipID = smdj.dealership
    INNER JOIN userinfo ui ON smdj.sm = ui.userID           
ELSEIF j.idType = 'Group' THEN 
    INNER JOIN smgroupjoins gj ON j.dealershipID = gj.groupID
    INNER JOIN userinfo ui ON gj.sm = ui.userID
ELSEIF j.idType = 'Agency' THEN 
    INNER JOIN smagencyjoins aj ON j.dealershipID = aj.agencyID
    INNER JOIN userinfo ui on aj.sm = ui.userID
END IF

したがって、idType(ディーラー、グループ、またはエージェンシー)とclientID(dealershipIDと呼ばれる)を持つテーブル(ジョブ)があります。どのセールスマネージャーがクライアントアカウントを「所有」しているかを判断するために、(idTypeに基づいて)特定のテーブルを結合する必要があります。idType ='dealership'の場合はsmdealershipjoinsに参加する必要があり、'Group'の場合はsmgroupjoinsに参加する必要があり、'agency'の場合はsmagencyjoinsに参加する必要があります。そうすれば、そのテーブルをuserinfoに参加して売上を得ることができます。マネージャーの名前。

また、内部結合を行うためにcaseステートメントを使用しようとしましたが、それでもエラーが発生しました。

4

1 に答える 1

9

3つのオプションのそれぞれに左/外部結合し、選択した条件で残りを処理します。

おそらく次のようなものです:

...
LEFT JOIN smdealershipjoins smdj 
    ON j.dealershipID = smdj.dealership
LEFT JOIN smgroupjoins gj 
    ON j.dealershipID = gj.groupID
LEFT JOIN smagencyjoins aj 
    ON j.dealershipID = aj.agencyID
LEFT JOIN userinfo ui 
    ON ui.userID = CASE
        WHEN j.idType = 'dealership' THEN smdj.sm
        WHEN j.idType = 'Group' THEN gj.sm
        WHEN j.idType = 'Agency' then aj.sm
    END
于 2013-03-26T15:05:01.060 に答える