【问题标题】:conditional mysql if inner join条件 mysql if 内部连接
【发布时间】:2014-11-01 16:26:50
【问题描述】:

如果字段不为空,是否可以进行条件连接?即,如果字段为空,则进行连接并且不返回值,如果字段不为空,则进行连接并返回值

SELECT CASE WHEN i.id_servicio is null THEN p.nombre as proveedor, origen_incidencia.nombre as origen, relativo_a.nombre as relativo, i . * , u.nombre AS usuario ELSE p.nombre as proveedor, origen_incidencia.nombre as origen, relativo_a.nombre as relativo, i . * , u.nombre AS usuario,s.nombre
end

from incidencias i 

INNER JOIN usuarios AS u ON i.id_usuarios =19 AND i.id_usuarios = u.id

case when i.id_servicio is not null then 
INNER JOIN servicios s ON s.id = i.id_servicio
end
INNER JOIN relativo_a ON relativo_a.id = i.id_relativo_a
INNER JOIN origen_incidencia ON origen_incidencia.id = i.id_origen_incidencia
INNER JOIN proveedores p ON p.id = i.id_proveedor

【问题讨论】:

    标签: mysql sql join conditional case


    【解决方案1】:

    是的,它被称为outer join

    其中有几种口味。在这种特殊情况下,您可以使用left outer join,通常简称为left join

    如果没有服务链接到 -erm- 事件 (?),此查询将返回所有事件,并且仅返回名称的 NULL

    SELECT 
      i.id,
      s.nombre
    FROM incidencias i 
    LEFT JOIN servicios s ON s.id = i.id_servicio
    

    还有right join,它的作用相同,但反过来(第一个表中的行是可选的)。很多时候,使用右连接被认为是不好的做法,因为它更容易阅读,特别是当你在同一个查询中将它与左连接结合使用时。我认为在某些情况下您必须使用它,因为您总是可以通过反转表来将其替换为左连接。

    【讨论】:

    • MySQL 不支持full outer join,但大多数其他数据库支持。
    • 我一直忘记这一点。谢谢!