Обновить сценарий сотрудника

#sql #oracle

#sql #Oracle

Вопрос:

У меня есть таблица поставщика, в которой содержится информация о наших сотрудниках. Он настроен следующим образом.

Provider_Data

  • PID
  • PROFIRST
  • PROMI
  • PROLAST

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

 Select ln.Location_ID,
       ln.Note_Author,
       lc.Customdata AS Residents
       FROM Location_Notes_Data LN 
       JOIN Location_Notes_Custom_Data lc 
            ON ln.Noteid = lc.Noteid
  

Я немного изменил свое объяснение здесь. Я использую этот код для получения идентификатора местоположения, Note_Author, а затем пользовательских данных из другой таблицы. Но когда заполняются location_Id и Note_author, это выглядит следующим образом: 491-12 и 122083, в них не указано их имя. Вот почему я использовал CASE инструкцию и вводил их вручную.

Note_Author = PID. Моя проблема, с которой я сталкиваюсь, заключается в том, что когда приходит новый сотрудник или когда сотрудник покидает мой скрипт, это не отразится, если я вручную не войду и не добавлю / не удалю их.

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

1. Ну, это, вероятно, потому, что вы жестко кодируете значения в регистре. Если да, то что вы могли бы сделать? Я не знаю, слишком мало данных для обработки. Возможно, присоединение его к какой-либо другой таблице исправит это, но я не уверен, поскольку у меня недостаточно информации.

2. Я добавил еще немного кода. Я мог бы также присоединиться к таблице Provider_Data, но разве это не просто перечислит все идентификаторы PID? Как я мог связать их все вместе, не используя регистр?

Ответ №1:

Я предполагаю, что вам просто нужен join . В вашем вопросе не так много деталей, но что-то вроде этого:

 select n.*, pd.*
from notes n left join
     provider_data pd
     on n.note_author = pd.pid
  

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

1. Я добавил еще несколько деталей к исходному сообщению. Итак, вы говорите, что я мог JOIN бы использовать 3-ю таблицу и заполнить эту таблицу Location_Id и Note_Author ?

Ответ №2:

Вы можете обновить таблицу из объединенных таблиц. Я так понимаю, вы пытаетесь обновлять записи сотрудников по мере их поступления или ухода из вашей компании? Я не совсем уверен, но если существует сопоставление между таблицами, вы можете закодировать оператор update примерно так.

 UPDATE  e
SET     e.Location_ID = ln.Location_ID
        ,e.Residents = lc.CustomData
FROM    Employee e
        INNER JOIN Location_Notes_Data AS ln ON ln.Note_Author = e.PID
        INNER JOIN Location_Notes_Custom_Data lc ON ln.Noteid = lc.Noteid
  

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

1. Я не пытаюсь обновить записи сотрудников. Я пытаюсь запустить отчет, используя поле note_author (имя сотрудника), но я хочу, чтобы отчет обновлялся, когда сотрудники приходят и уходят. Если я жестко закодирую с case помощью statement, то, если мы получим нового сотрудника, мне придется вернуться и вручную добавить этого человека.