【问题标题】:How do I copy a column from one table to another table in sql如何在sql中将列从一个表复制到另一个表
【发布时间】:2020-05-10 17:19:47
【问题描述】:

两张桌子 区域(区域ID,区域名称)

国家(国家 ID、国家名称、地区 ID)

countries 表中有许多 country_id 和 country_name,其中 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);

预期产出 = view(region_name, no. of countries)

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

【问题讨论】:

  • 问题标题和正文完全不同。请以格式化文本的形式提供示例数据和预期结果。
  • 请提供样本数据和预期输出。
  • “我需要创建一个表格,其中显示 region_name 和包含这些地区的国家/地区数量。” 这听起来像是VIEW 而不是更好的服务一张桌子。否则一旦你添加/删除一个国家,计数就会出错。
  • 我更新了问题
  • 您已经用 sql-server 标记了它,但该语法看起来像是在运行 Oracle。你能澄清一下你使用的是哪个@K.zaid?

标签: sql oracle


【解决方案1】:
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

创建视图应该是一个更好的选择,而不是这个需求的表格。

【讨论】:

    【解决方案2】:

    如果我理解正确的话,也许这个会起作用:

    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 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
       );
    

    【讨论】:

      猜你喜欢
      • 2015-01-28
      • 2020-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      • 1970-01-01
      相关资源
      最近更新 更多