ここでの少し珍しい要件ですが、残念ながら、開発パスのずっと前のテーブルデザインが貧弱でした。
私は3つのテーブルを持っていますrepairs
、、、staff
technicians
修復テーブルには、システムに予約されている修復タスクに関するすべての情報が含まれています。これには「技術者」というフィールドが含まれます。このフィールドには、スタッフ(テーブルスタッフから)のIDまたは外部委託(オフサイト)技術者(テーブル技術者から)のIDが含まれます。後者の場合、IDには「T」のプレフィックス
staff
したがって、この後者の場合のプレフィックスのために、そのTを取得し、それを使用して、SQLクエリがテーブルまたはテーブルを結合する必要があるかどうかを判断できる必要があります。technicians
だから、私はかなり単純なSQLクエリを持っています:
SELECT technicians.screenName,
repairs.turnAround, repairs.technician, repairs.dateIn, repairs.Type,
invoices.status, invoices.grossTotal
FROM repairs
LEFT JOIN invoices ON repairs.invNo=invoices.id
LEFT JOIN technicians ON technicians.id = REPLACE(repairs.technician, 'T','')
WHERE repairs.id ='REQUIRED JOB ID' ORDER BY repairs.dateIn DESC
これは問題なく機能し、外部委託の技術者がいるすべての場合の「T」プレフィックスを克服します。
しかし...
テーブルに参加しようとすると、IDが混同されstaff
ます。
したがって、次のような条件付き結合が必要です。
LEFT JOIN
WHEN instr(repairs.technican,'T') > 0 THEN
JOIN TECHNICIANS TABLE
ELSE
JOIN STAFF TABLE
END
ここで確認できるもう1つの問題は、テーブルにtechnicans.screenName
参加していない場合、フィールドリストに含まれているフィールドが機能しないことですtechnicians
。ただし、テーブルには、そのテーブルに参加した場合に必要なstaff
フィールドが含まれているため、テーブルプレフィックスのないscreenName
あいまいなフィールド名screenName
は機能するはずですよね?
編集:上記の条件付き結合の例は機能しないことを追加する必要があります!