Zaidf Ответов: 1

Как добавить столбец из одной таблицы в другую SQL


Два стола:
region(region_id,region_name)

countries(country_id,country_name,region_id)

есть много country_id и country_name в таблице стран с region_id, заданным несколько раз для этих стран ( region_id - это только 4) Мне нужно создать таблицу, в которой будет показано имя региона и количество стран внутри регионов.

Что я уже пробовал:

update countries 
Set countries.regions = regions.region_name
from countries
Inner join regions
On region_id = country _id

Richard Deeming

Почему вы отметили это как "C++"?

1 Ответов

Рейтинг:
2

MadMyche

оригинальный пост:
Мне нужно создать таблицу, в которой будет показано имя региона и количество стран внутри регионов.
Насколько я понимаю вам нужен двухколоночный результирующий набор подобный этому для тестовых данных которые я создал
DECLARE @Region    TABLE (RegionID INT,  RegionName NVARCHAR(32))
DECLARE @Countries TABLE (CountryID INT, CountryName NVARCHAR(32), RegionID INT)

INSERT @Region VALUES
  (1, 'Asia')
, (2, 'Europe')

INSERT @Countries VALUES 
  (1, 'Japan', 1)
, (2, 'China', 1)
, (3, 'Germany', 2)
, (4, 'Italy', 2)
, (5, 'France', 2)

/* Query Results 
RegionName | CountryCount
-----------|-------------
Asia       |       2
Europe     |       3
*/
RegionName находится только в таблице Region, а таблица Countries содержит все имена стран вместе с таблицей RegionID, чтобы связать ее обратно с таблицей Region. Таким образом, общим является столбец RegionID, так что это то, что нужно использовать для объединения таблиц вместе
FROM       @Region    r
INNER JOIN @Countries c ON r.RegionID = c.RegionID
Следующая часть уравнения заключается в том, что вам нужно сделать Count из названий стран
SELECT     CountryCount = Count(c.CountryName)
FROM       @Region    r
INNER JOIN @Countries c ON r.RegionID = c.RegionID
/* Query Results
CountryCount
============
     5
*/
Теперь вы также хотите, чтобы имя региона было включено, поэтому первое, что люди хотят сделать, это просто добавить его вот так
SELECT     r.RegionName, CountryCount = Count(c.CountryName)
/* Query Results
ERROR: Column '@Region.RegionName' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
*/
Итак, чтобы сделать то, что вы хотите, мы добавим в GROUP BY пункт о группировке страны по регионам. Это даст нам этот код
SELECT     r.RegionName, CountryCount = Count(c.CountryName)
FROM       @Region    r
INNER JOIN @Countries c ON r.RegionID = c.RegionID
GROUP BY   r.RegionName
И запуск этого процесса даст результаты, которые я показал с помощью исходных деклараций таблиц и данных, которые я создал


Maciej Los

5ed!