这里有点不寻常的要求,不幸的是,这归结为一个糟糕的表设计,在开发过程中很长一段路要走!
我有 3 张桌子repairs
,,,,staff
technicians
维修表包含有关在我的系统中预订的维修任务的所有信息。这包含一个“技术人员”字段,该字段将包含工作人员的 ID(来自表工作人员)或外包(异地)技术人员(来自表技术人员)的 ID,在后一种情况下,ID 将具有“T”的前缀
因此,由于后一种情况前缀,我需要能够获取该 T 并使用它来确定我的 SQL 查询是否需要 JOIN 表staff
或表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”前缀。
但...
如果我尝试加入staff
表,ID 会混淆。
所以我需要一个条件连接,例如:
LEFT JOIN
WHEN instr(repairs.technican,'T') > 0 THEN
JOIN TECHNICIANS TABLE
ELSE
JOIN STAFF TABLE
END
我在这里可以看到的另一个问题是,technicans.screenName
如果我不加入表,则包含在字段列表中的字段将不起作用technicians
,但是,因为staff
表包含一个字段screenName
,如果我加入了该表,我将需要该字段一个没有表前缀的模棱两可的字段名称screenName
应该可以工作,不是吗?
编辑:我可能应该补充一点,上面的条件连接示例不起作用!