mysql - 条件JOIN根据主表字段的INSTR确定表

标签 mysql join conditional-statements

这里的要求有点不寻常,不幸的是,这归因于糟糕的表设计,远远落后于开发道路!

我有 3 张 table ,维修工作人员技术人员

维修表包含有关预订到我的系统的维修任务的所有信息。它包含一个“技术人员”字段,该字段将包含工作人员的 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 

我在这里看到的进一步问题是,如果我不加入 technicians 表,则包含在字段列表中的字段 technicans.screenName 将不起作用,因为 staff 表包含一个字段 screenName,如果我加入该表,如果我有一个不明确的字段名称 screenName ,我需要该字段没有表前缀它应该可以工作不是吗?

编辑:我可能应该补充一点,上面的条件连接示例不起作用!

最佳答案

您可以使用包含/排除 INSTR 条件连接两个表,然后显示非空值:

SELECT COALESCE(technicians.screenName, staff.screenName) AS 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 instr(repairs.technican,'T') > 0 AND technicians.id = REPLACE(repairs.technician, 'T','')
LEFT JOIN staff ON instr(repairs.technican,'T') = 0 AND staff.id = repairs.technician

WHERE repairs.id ='REQUIRED JOB ID' ORDER BY repairs.dateIn DESC

关于mysql - 条件JOIN根据主表字段的INSTR确定表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11292563/

相关文章:

mysql - 当所有表都没有主键时,使用 'SET' 进行多列更新

php - 无法使用PHPExcel将Excel中的数据导入到phpMySql

sql - 如何在 MySQL 中执行 FULL OUTER JOIN?

python - 根据Python中groupby的第一个和最后一个值的条件创建一个新列

css - HTML : Using conditional comments

mysql - 不同群体、不同领域的用户的数据库结构

mysql - 根据左连接数重复行 X 次

mysql - sphinx 搜索 : joining 3 tables

sql - 这个 JOIN 查询有什么问题?

python - 年金公式的 future 值(value)不起作用