【问题标题】:Creating table using select statement from multiple tables使用 select 语句从多个表中创建表
【发布时间】:2014-01-20 09:38:16
【问题描述】:

我有一项大学任务是使用 SELECT 语句从多个表中创建表,但这并不简单……这里是基本信息:

我正在使用 2 张桌子 -

CITY(city_ID, name);
PERSON(person_ID, name, surname, city_ID); 
--city_ID is FK indicating in which city person was born.

现在我的任务是创建新表

STATISTICS(city_ID, city_name, number_of_births);
--number_of_births is basically a count of people born in each city

问题是我必须只使用 SELECT 语句来执行此操作。

我已经尝试过这样的事情:(我很清楚这不可能工作,但为了让你更好地了解我卡在哪里)

CREATE TABLE Statistics AS 
(SELECT city.city_ID, city.name as "city_name", number_of_births AS 
                (SELECT COUNT(*) FROM person WHERE person.city_id = city.city_id)
 FROM city, person);

【问题讨论】:

  • 什么 DBMS?数据库服务器? mysql?甲骨文?
  • 该死!忘记添加标签了,是 ORACLE @DaveZych
  • 哈!您可以尝试我的答案,但我认为这不是 Oracle 的正确语法。如果不让我知道,我会删除它。
  • 我重写了它以匹配 oracle 方言,一切似乎都很好!非常感谢朋友!
  • 我正在删除我的答案,因为它对 Oracle 无效。添加您所做的答案并接受您的答案。

标签: sql oracle select create-table


【解决方案1】:

对于 SQL Server,您可以使用SELECT * INTO。像这样的:

SELECT
    *
INTO Statistics
FROM (
    SELECT 
        city.city_ID, 
        city.name as "city_name", 
        (SELECT COUNT(*) FROM person WHERE person.city_id = city.city_id) as 'number_of_births'
    FROM city
        inner join person on city.city_id = person.city_id
) t1

【讨论】:

  • SELECT INTO 是 sql server 语法.. 照样创建表,你懂的!
  • 这对 Oracle 无效。我不明白它是如何被接受的。
  • @a_horse_with_no_name 我在他添加 Oracle 标签之前添加了这个答案。然后他接受了。老实说,我也不知道。
【解决方案2】:

(代表问题作者发布).

好的,这真的很混乱。用 Oracle 方言重写时,Dave Zych 的答案是正确的。

CREATE TABLE Statistics AS SELECT * FROM (
    SELECT DISTINCT
        city.city_ID, 
        city.name AS "City_name",
        (SELECT COUNT(*) FROM person WHERE person.city_ID = city.city_ID) AS "number_of_births"
         FROM city  INNER JOIN person ON city.city_ID = person.city_ID);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 2015-09-20
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    相关资源
    最近更新 更多