基本上下面的查询现在可以正常工作,以检索我想要的内容。
但是我很确定有一种更有效的方式编写此查询:
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
语句的更好的解决方案。
答案 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;