Заполнение таблицы данными ключей двух других таблиц в SQL - PullRequest
0 голосов
/ 26 сентября 2018

Исходя из этой исходной таблицы: 'Public_Table'

U_ID city        state

1    NYC         NY
2    DET         MI
3    DEN         Co
4    NYC         NY
5    NULL        NULL

(в SQL) мне пришлось создать новую таблицу «Пользователи», состоящую из всех уникальных пользователей и другого из всех уникальных городов (и должен был определитьcity_ids для каждого города с использованием триггера и последовательности), а затем заполните оба поля с помощью Public_table: 'Users'

U_ID

1
2
3
4
5

и 'Cities'

City_ID    name    state
01         NYC     NY
02         DET     MI
03         DEN     Co

Затем мне нужно было определитьновая таблица 'current_user_city', которая состоит из каждого отдельного пользователя со связанным с ним city_id и затем заполняет его.Кроме того, важно отметить, что для человека с НУЛЕВОЙ записью для города и штата они все равно должны быть указаны в новой таблице.Например, вот как это будет выглядеть в этом случае:

U_ID   City_ID

1        01
2        02
3        03
4        01
5        NULL

Я пробовал довольно много вариантов, думая, что это должно быть легкой задачей, но я очень плохо знаком с SQL, и мне еще предстоит найтивозможный способ сделать эту работу, включая нулевые значения.Очевидно, мне нужно каким-то образом использовать город, штат пользователя и город, штат каждого city_id, чтобы сопоставить их, и ВСТАВИТЬ В новую таблицу, но я не знаю подходящих команд / синтаксиса для этого.Также важно отметить, что никакие дополнительные таблицы не могут быть созданы для решения этой проблемы, также все эти таблицы уже должны быть определены при попытке их заполнения.

Если у вас есть какие-либо идеи, пожалуйста, дайте мне знать!спасибо!

1 Ответ

0 голосов
/ 26 сентября 2018

Требуемый запрос:

 select Users.U_Id, Cities.City_id 
    from Users Inner Join Public_Table On Users.U_Id = Public_Table.U_Id
    Left Outer Join Cities On Public_Table.city = Cities.name

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

Left Outer Join получает все, что будет внутренним соединением, а также получает значения из «левой» таблицы, которые равны нулю с правой стороны.У него есть другой вариант, называемый правым внешним соединением.

...