简体   繁体   English

如何将列从一个表复制到 sql 中的另一个表

[英]How do I copy a column from one table to another table in sql

two tables region(region_id,region_name)两个表区域(region_id,region_name)

countries(country_id,country_name,region_id)国家(country_id,country_name,region_id)

there are many country_id and country_name in countries table with region_id given multiple times to those countries ( region_id are only 4) I need to create a table or view where it shows region_name and number of countries with the regions.国家表中有许多国家 ID 和国家名称,其中多次给这些国家提供了 region_id( region_id 只有 4 个)我需要创建一个表格或视图,其中显示 region_name 和该地区的国家数量。

CREATE TABLE regions
  (
    region_id NUMBER GENERATED BY DEFAULT AS IDENTITY
    START WITH 5 PRIMARY KEY,
    region_name VARCHAR2( 50 ) NOT NULL
  );
-- countries table


CREATE TABLE countries
  (
    country_id   CHAR( 2 ) PRIMARY KEY  ,
    country_name VARCHAR2( 40 ) NOT NULL,
    region_id    NUMBER                 , -- fk
    CONSTRAINT fk_countries_regions FOREIGN KEY( region_id )
      REFERENCES regions( region_id ) 
      ON DELETE CASCADE
  );


REM INSERTING into REGIONS
SET DEFINE OFF;
Insert into REGIONS (REGION_ID,REGION_NAME) values (1,'Europe');
Insert into REGIONS (REGION_ID,REGION_NAME) values (2,'Americas');
Insert into REGIONS (REGION_ID,REGION_NAME) values (3,'Asia');
Insert into REGIONS (REGION_ID,REGION_NAME) values (4,'Middle East and Africa');

REM INSERTING into COUNTRIES
SET DEFINE OFF;
Insert into COUNTRIES (COUNTRY_ID,COUNTRY_NAME,REGION_ID) values ('AR','Argentina',2);
Insert into COUNTRIES (COUNTRY_ID,COUNTRY_NAME,REGION_ID) values ('AU','Australia',3);
Insert into COUNTRIES (COUNTRY_ID,COUNTRY_NAME,REGION_ID) values ('BE','Belgium',1);
Insert into COUNTRIES (COUNTRY_ID,COUNTRY_NAME,REGION_ID) values ('BR','Brazil',2);
Insert into COUNTRIES (COUNTRY_ID,COUNTRY_NAME,REGION_ID) values ('CA','Canada',2);
Insert into COUNTRIES (COUNTRY_ID,COUNTRY_NAME,REGION_ID) values ('CH','Switzerland',1);
Insert into COUNTRIES (COUNTRY_ID,COUNTRY_NAME,REGION_ID) values ('CN','China',3);
Insert into COUNTRIES (COUNTRY_ID,COUNTRY_NAME,REGION_ID) values ('DE','Germany',1);
Insert into COUNTRIES (COUNTRY_ID,COUNTRY_NAME,REGION_ID) values ('DK','Denmark',1);
Insert into COUNTRIES (COUNTRY_ID,COUNTRY_NAME,REGION_ID) values ('EG','Egypt',4);
Insert into COUNTRIES (COUNTRY_ID,COUNTRY_NAME,REGION_ID) values ('FR','France',1);
Insert into COUNTRIES (COUNTRY_ID,COUNTRY_NAME,REGION_ID) values ('IL','Israel',4);
Insert into COUNTRIES (COUNTRY_ID,COUNTRY_NAME,REGION_ID) values ('IN','India',3);
Insert into COUNTRIES (COUNTRY_ID,COUNTRY_NAME,REGION_ID) values ('IT','Italy',1);
Insert into COUNTRIES (COUNTRY_ID,COUNTRY_NAME,REGION_ID) values ('JP','Japan',3);
Insert into COUNTRIES (COUNTRY_ID,COUNTRY_NAME,REGION_ID) values ('KW','Kuwait',4);
Insert into COUNTRIES (COUNTRY_ID,COUNTRY_NAME,REGION_ID) values ('ML','Malaysia',3);
Insert into COUNTRIES (COUNTRY_ID,COUNTRY_NAME,REGION_ID) values ('MX','Mexico',2);
Insert into COUNTRIES (COUNTRY_ID,COUNTRY_NAME,REGION_ID) values ('NG','Nigeria',4);
Insert into COUNTRIES (COUNTRY_ID,COUNTRY_NAME,REGION_ID) values ('NL','Netherlands',1);
Insert into COUNTRIES (COUNTRY_ID,COUNTRY_NAME,REGION_ID) values ('SG','Singapore',3);
Insert into COUNTRIES (COUNTRY_ID,COUNTRY_NAME,REGION_ID) values ('UK','United Kingdom',1);
Insert into COUNTRIES (COUNTRY_ID,COUNTRY_NAME,REGION_ID) values ('US','United States of America',2);
Insert into COUNTRIES (COUNTRY_ID,COUNTRY_NAME,REGION_ID) values ('ZM','Zambia',4);
Insert into COUNTRIES (COUNTRY_ID,COUNTRY_NAME,REGION_ID) values ('ZW','Zimbabwe',4);

expected output = view( region_name, no. of countries)预期 output = view(region_name, no. of countries)

------------------------------------------------------------------------

Maybe this one will work if I understood you correctly:如果我理解正确,也许这个会起作用:

SELECT 
    REGIONS.REGION_ID,
    REGIONS.REGION_NAME,
    COUNT(DISTINCT COUNTRIES.COUNTRY_ID) AS num_countries
FROM COUNTRIES
JOIN REGIONS
ON 
    REGIONS.REGION_ID=COUNTRIES.REGION_ID
GROUP BY 
    REGIONS.REGION_ID,
    REGIONS.REGION_NAME

And to create a view:并创建一个视图:

    CREATE VIEW my_schema.name_of_my_view AS (
       SELECT
           REGIONS.REGION_ID,
           REGIONS.REGION_NAME,
           COUNT(DISTINCT COUNTRIES.COUNTRY_ID) AS num_countries
       FROM COUNTRIES
                JOIN REGIONS
                     ON
                             REGIONS.REGION_ID=COUNTRIES.REGION_ID
       GROUP BY
           REGIONS.REGION_ID,
           REGIONS.REGION_NAME
   );
CREATE VIEW Region_Countries
AS
SELECT R.REGION_NAME,COUNT(COUNTRY_NAME) AS TOTAL_COUNTRIES
FROM REGIONS R 
INNER JOIN COUNTRIES C  ON R.REGION_ID=C.REGION_ID
GROUP BY R.REGION_NAME
GO

SELECT * FROM Region_Countries

Creating View should be a better option Rather than a table for this Requirement.创建视图应该是一个更好的选择,而不是这个需求的表。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM