#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, то, если мы получим нового сотрудника, мне придется вернуться и вручную добавить этого человека.