如何更好地编码此多选子查询(子查询)?

时间:2018-10-20 23:26:07

标签: mysql sql

基本上下面的查询现在可以正常工作,以检索我想要的内容。

但是我很确定有一种更有效的方式编写此查询:

SELECT dg.ultimo_codigo_de_gestion_prejuridico, dg.hora_inicio_gestion, 
       dg.telefono, dg.fecha_gestion, cg.valor_codigo, cg.contacto 
FROM detalle_gestion_con_obligacion 
AS dg INNER JOIN codigo_gestion 
AS cg ON dg.ultimo_codigo_de_gestion_prejuridico = cg.cod_gestion  
WHERE nro_documento = 1234567 
  AND DATE(fecha_gestion) NOT IN (2018-10-20) AND telefono 
  IN ((SELECT tel_residencia FROM obligacion WHERE nro_obligacion = 1234567) ,
      (SELECT tel_oficina FROM obligacion WHERE nro_obligacion = 1234567), 
      (SELECT celular FROM obligacion WHERE nro_obligacion = 1234567), 
      (SELECT tel_residencia1 FROM obligacion WHERE nro_obligacion = 1234567) ) 
ORDER BY fecha_gestion DESC, hora_inicio_gestion DESC limit 1;

您可能会说,围绕IN子句,我想检索电话属于该列表的协议(detalle_gestion_con_obligacion)

我正在寻找不需要四个不同的SELECT语句的更好的解决方案。

1 个答案:

答案 0 :(得分:2)

您可以加入obligacion而不是使用IN

SELECT dg.ultimo_codigo_de_gestion_prejuridico, dg.hora_inicio_gestion, 
       dg.telefono, dg.fecha_gestion, cg.valor_codigo, cg.contacto 
FROM detalle_gestion_con_obligacion AS dg 
INNER JOIN codigo_gestion AS cg ON dg.ultimo_codigo_de_gestion_prejuridico = cg.cod_gestion  
INNER JOIN obligacion AS o ON telefono IN (o.tel_residencia, o.yel_oficina, o.celular, o.tel_residencial)
WHERE nro_documento = 1234567 
  AND DATE(fecha_gestion) NOT IN (2018-10-20) 
ORDER BY fecha_gestion DESC, hora_inicio_gestion DESC 
limit 1;