Изменить запрос (добавить правильное объединение слева) в oracle - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть запрос, он отлично работает, но я хочу добавить еще один столбец!

SELECT 
 typ.name as Silo_name,
 tr.DEVID,
 tr.name as dev_name
 FROM 
   HANGINGTHREAD_SILO ev 
   LEFT JOIN SILO typ  
       ON ev.ID_SILO = typ.id 
   LEFT JOIN IOT_DEVICES  tr
       ON ev.DEVICES_ID = tr.id 

Но я хочу добавить еще одну максимальную температуру столбца, данные для этого столбца находятся в таблице TEMPR_SILO. И вот запрос, который я использую, чтобы найти данные, которые мне нужны для каждого tr.DEVID.

select MAX(to_char(TEMP,'99.99')) from TEMPR_SILO where ID_TRANS in (select max(ID_TRANS) from TEMPR_SILO)   and NAME in (select NAME from SILO_SENSOR where DEVICES_ID = tr.DEVID)

Я пробовал это так, но я получил ошибку

"ORA -20999: Не удалось проанализировать SQL запрос!
ORA-06550: строка 17, столбец 3: ORA-00933: SQL команда не завершена должным образом "

SELECT 
 typ.name as Silo_name,
 tr.DEVID,
 tr.name as dev_name
 ,max(ts.TEMP)  AS "Lowest salary"
 FROM 
   HANGINGTHREAD_SILO ev 
   LEFT JOIN SILO typ  
       ON ev.ID_SILO = typ.id 
   LEFT JOIN IOT_DEVICES  tr
       ON ev.DEVICES_ID = tr.id 
   LEFT JOIN  TEMPR_SILO  ts
     ON ts.name  in (select NAME from SILO_SENSOR where DEVICES_ID = tr.DEVID)
     and  ts.ID_TRANS in(select max(ID_TRANS) from TEMPR_SILO) 
GROUP BY  
 ev.id,
 typ.name as Silo_name,
 tr.DEVID,
 tr.name as dev_name ;

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

Я не уверен, в каком запросе вы столкнулись с проблемой.

Если вы столкнулись с проблемой в последнем запросе из вашего вопроса, то я должен сказать, что есть несколько проблем, которые я выделил в следующий запрос:

SELECT
    TYP.NAME   AS SILO_NAME,
    TR.DEVID,
    TR.NAME    AS DEV_NAME,
    MAX(TS.TEMP) AS MAX_TEMP --"Lowest salary" -- just changed the name, not necessary in your case
FROM
    HANGINGTHREAD_SILO EV
    LEFT JOIN SILO TYP ON EV.ID_SILO = TYP.ID
    LEFT JOIN IOT_DEVICES TR ON EV.DEVICES_ID = TR.ID
    LEFT JOIN SILO_SENSOR SS ON SS.DEVICES_ID = TR.DEVID -- added this left join as JOIN of TS with it is not correct in your query
    LEFT JOIN TEMPR_SILO TS ON TS.NAME = SS.NAME -- added this join condition
                               AND TS.ID_TRANS IN (
        SELECT
            MAX(ID_TRANS)
        FROM
            TEMPR_SILO
    )
GROUP BY
    EV.ID,
    TYP.NAME, --as Silo_name, -- "as" is not allowed here
    TR.DEVID,
    TR.NAME; -- as dev_name -- "as" is not allowed here
0 голосов
/ 19 февраля 2020

Вот мой вариант и он работает)

for MAX
SELECT 
 typ.name as Silo_name,
 tr.DEVID,
 ts.temp as max_temp,
 tr.name as dev_name
 FROM 
   HANGINGTHREAD_SILO ev 
   LEFT JOIN SILO typ  
       ON ev.ID_SILO = typ.id 
   LEFT JOIN IOT_DEVICES  tr
       ON ev.DEVICES_ID = tr.id 
   LEFT JOIN  SILO_SENSOR er   
   ON er.DEVICES_ID =  tr.DEVID
   LEFT JOIN  TEMPR_SILO  ts
    ON ts.NAME = er.name
   LEFT JOIN  TEMPR_SILO  ns
    ON  ns.NAME = er.name 
where ts.temp in (select max(TEMP) from TEMPR_SILO
                    where ID_TRANS in (select max(ID_TRANS) from TEMPR_SILO)
                    and NAME in (select NAME from SILO_SENSOR where DEVICES_ID = tr.DEVID))

group by
 typ.name ,
 tr.DEVID,
 ts.temp, 
 tr.name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...