[英]MySQL Query with LEFT JOIN (SELECT) ORDER and LIMIT
今天,我需要這個非常長的選擇查詢的幫助。
事情是我需要從1個表“ dispositivos”中獲取所有記錄,然后從LEFT JOIN“ monitoreo”中獲取其他一些表,而該查詢最重要的部分是加入表“ incidencia”。
一個“ dispositivo”可以有多個“ incidencia”,從所有“ incidencia”中,我需要一個列“ alerta_id”的值最低的應用程序,其中“ incidencia.fecha_incidente” =“ monitoreo.fecha”和“ incidencia.fecha_correccion” ”為NULL。
現在,由於我只需要“ incidencia”中的一條記錄,因此我使用LIMIT。
但是我一直在控制台上打印結果,當我在“ incidencia”的選擇查詢中使用limit時,來自它的5列為null,如果我不這樣做,那么實際上它為我帶來了整個數據,但是當然,它會針對找到的每個“偶然事件”重復“ dispositivos”信息。
現在這是我的查詢。 如果有人可以提供幫助,我將不勝感激。 如果您不了解我的查詢或之前的內容,請隨時提出。 順便說一句,所有的引號和加號是因為查詢針對的是node.js項目,我需要這樣做才能更好地可視化我的代碼。
SELECT d.id
, d.tipo_dispositivo_id
, d.unidad_adscripcion_id
, d.nro_cns
, d.cod_inter
, d.nombre_senal
, d.lat as lat_origen
, d.long as long_origen
, d.direccion_latitud_id
, d.direccion_longitud_id
, d.descripcion
, d.alc
, d.ele
, d.cod_iala_id
, d.sistema_acceso_id
, d.color_bombillo_id
, d.modelo_bombillo_id
, d.cant_bateria
, d.volt_grupo_bateria
, d.nro_panel_solar
, d.corriente_panel as cor_pan
, d.forma_estructura
, d.altura_torre
, d.nro_telf
, d.lat_gps
, d.long_gps
, d.activo
, mon.tipo_evento_id
, mon.fecha fecha_hora
, mon.voltaje_pila
, mon.voltaje_panel
, mon.consumo_linterna
, mon.corriente_panel
, mon.estado
, mon.temperatura
, mon.gpsval
, mon.lat lat_mon
, mon.dlat
, mon.long long_mon
, mon.dlong
, mon.velocidad
, mon.rumbo
, mon.dispositivo_id disp_check
, i.*
FROM dispositivos d
LEFT
JOIN monitoreo_actual mon
ON mon.dispositivo_id = d.id
LEFT
JOIN
( SELECT dispositivo_id disp_inc
, alerta_id
, fecha_incidente
, hora
, fecha_correccion
FROM incidencia inc
WHERE fecha_correccion IS NULL
ORDER
BY alerta_id ASC LIMIT 1
) i
ON i.disp_inc = d.id
解決此問題的一種方法是使用內聯視圖,該視圖從要返回的“ incidencia”中返回行的唯一標識符,然后將其與inidencia表結合以獲取行。
例如
LEFT
JOIN ( SELECT l.fecha_incidente
, MIN(l.alerta_id) AS lowest_alerta_id
FROM incidencia l
WHERE l.fecha_correccion IS NULL
GROUP BY l.fecha_incidente
) m
ON m.fecha_incidente = monitoreo.fecha
LEFT JOIN incidencia n
ON n.fecha_incidente = m.fecha_incidente
AND n.alerta_id = m.lowest_alerta_id
添加您選擇的min(alerta_id)並在末尾按alerta_id分組
您是否嘗試過將第二個LEFT JOIN更改為JOIN ?。聽起來好像您不希望與本節不匹配的行。
'SELECT d.id, d.tipo_dispositivo_id, d.unidad_adscripcion_id, d.nro_cns, d.cod_inter, d.nombre_senal, d.lat as lat_origen, d.long as long_origen, '+
'd.direccion_latitud_id, d.direccion_longitud_id, d.descripcion, d.alc, d.ele, d.cod_iala_id, d.sistema_acceso_id, d.color_bombillo_id, '+
'd.modelo_bombillo_id, d.cant_bateria, d.volt_grupo_bateria, d.nro_panel_solar, d.corriente_panel as cor_pan, d.forma_estructura, d.altura_torre, '+
'd.nro_telf, d.lat_gps, d.long_gps, d.activo, '+
'mon.tipo_evento_id, mon.fecha fecha_hora, mon.voltaje_pila, mon.voltaje_panel, mon.consumo_linterna, mon.corriente_panel, mon.estado, '+
'mon.temperatura, mon.gpsval, mon.lat lat_mon, mon.dlat, mon.long long_mon, mon.dlong, mon.velocidad, mon.rumbo, mon.dispositivo_id disp_check, '+
'iala.cod, '+
'adsc.descripcion uni_ads_desc, '+
'acceso.descripcion acceso_desc, '+
'color.descripcion color_bombillo, '+
'modelo.caracteristicas, '+
'marca.descripcion marca_bombillo, '+
'evento.descripcion evento_alerta, '+
'inc.alerta_id, '+
'alert.descripcion descripcion_alerta '+
'FROM dispositivos d '+
'LEFT JOIN monitoreo_actual mon ON mon.dispositivo_id = d.id '+
'LEFT JOIN m_cod_iala iala ON iala.id = d.cod_iala_id '+
'LEFT JOIN m_unidad_adscripcion adsc ON adsc.id = d.unidad_adscripcion_id '+
'LEFT JOIN m_sistema_acceso acceso ON acceso.id = d.sistema_acceso_id '+
'LEFT JOIN m_color_bombillo color ON color.id = d.color_bombillo_id '+
'LEFT JOIN m_modelo_bombillo modelo ON modelo.id = d.modelo_bombillo_id '+
'LEFT JOIN m_marca_bombillo marca ON marca.id = modelo.marca_bombillo_id '+
'LEFT JOIN m_tipo_evento evento ON evento.id = mon.tipo_evento_id '+
'LEFT JOIN (SELECT dispositivo_id, MIN(alerta_id) AS alerta_id, fecha_incidente, fecha_correccion '+
'FROM incidencia '+
'WHERE fecha_correccion IS NULL '+
'GROUP BY dispositivo_id) inc ON inc.dispositivo_id = d.id AND fecha_incidente = mon.fecha '+
'LEFT JOIN m_alerta alert ON alert.id = inc.alerta_id'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.