Как я могу использовать соединение из другой таблицы, когда я делаю максимум для столбца в ORACLE?

#sql #oracle #join

Вопрос:

Получив эту проблему, в которой я использую максимальное значение для столбца, он возвращает мне номер. (В моих таблицах уже есть ограничения).

Фактический Возврат

КВЕАНО CVENUMERO CVEACCION
2021 7 4
2021 1 3

Что я хочу вернуть из TblACCION

КВЕАНО CVENUMERO CVEACCION НАЗВАНИЕ CVEACCION Взято из tblACCION
2021 7 4 ИМЯ ДЛЯ НОМЕРА 4
2021 1 3 ИМЯ ДЛЯ НОМЕРА 3

Мой фактический запрос таков

 SELECT * FROM  (  SELECT  cveano,  cvenumero,  max(cveaccion) as ultima FROM  tblbitacoragf  WHERE  cveusuario = 1   GROUP BY  cvenumero,  cveano  order by max(fechaaccion) desc  ) WHERE ROWNUM <= 4   

Я пробовал делать

INNER JOIN tblACCION ta USING (CVEACCION)

и в ИЗБРАННОМ

ta.descripcion AS accion

но я думаю, что что-то не так, потому что он всегда просит меня

  1. 00000 — «отсутствует правая скобка»

и я проверил наличие скобок, но в скобках недостатка нет.

Обновить

Я пробовал это 2.0 , ничего

Комментарии:

1. вам не нужно «как» для псевдонима таблицы, необязательно указывать псевдоним столбца в предложении select. Заменить «tblACCION как ta» на «tblACCION ta».

2. Я изменил его после того, как этот пост был загружен (не работал), но в любом случае Thnxs :).

3. Значит, все решено ?

4. Нет, это не так 🙁 .

5. Какая у вас сейчас проблема? Что касается синтаксиса, то такой запрос в порядке вещей.

Ответ №1:

Как я понял, вы ищете что — то подобное.

 SELECT   *  FROM   (  SELECT   t1.cveano,   t1.cvenumero,   max(t1.cveaccion) as ultima,   max(t2.cveaccionName) as cveaccionName   FROM   tblbitacoragf t1   INNER JOIN tblACCION t2 ON t1.cveaccion = t2.cveaccion   WHERE   t1.cveusuario = 1   GROUP BY   t1.cvenumero,   t1.cveano   order by   max(t1.fechaaccion) desc  )  WHERE   ROWNUM <= 4  

Также вы можете попробовать это.

 SELECT   abc.*,   xyz.cveaccionName  FROM   (  SELECT   cveano,   cvenumero,   max(cveaccion) as ultima   FROM   tblbitacoragf   WHERE   cveusuario = 1   GROUP BY   cvenumero,   cveano   order by   max(fechaaccion) desc  ) abc  INNER JOIN tblACCION xyz ON abc.ultima = xyz.cveaccion  WHERE   ROWNUM <= 4  

Комментарии:

1. Оооо… Я понял это сейчас, мне нужно было максимизировать их обоих, и это сработало идеально, и мое соединение было Там, Где нужно, снизу. Действительно ценю это.

2. @RudyRosa Да. Вам нужно использовать max или min , если вы используете Group By . Также Join следует включить «после from «, но «до where «. Я также добавил альтернативное решение. Вы можете использовать то, что вам наиболее подходит.

3. Отлично! Не знал, что псевдониму может быть присвоена целая скобка. но поправьте меня, если я ошибаюсь, abc-это псевдоним для select из tblbitacoragf и xyz из select или присоединиться к tblACCION ? Просто пытаюсь лучше понять второе решение.

4. @RudyRosa Да, Вы правы. abc -это подзапрос ALIAS . xyz — это table alias из tblACCION

5. @RudyRosa Вы не можете получить доступ ко всем столбцам tblbitacoragf таблицы с помощью abc . Только столбцы и псевдонимы, определенные в подзапросе. Но вы можете получить доступ ко всем столбцам tblACCION использования xyz.