【问题标题】:I'm having issues with the ALTER TABLE function我在使用 ALTER TABLE 函数时遇到问题
【发布时间】:2017-08-25 18:43:44
【问题描述】:

我正在尝试使用表 tripguidereservation 来制作规范化表。我收到错误“ORA-00933:SQL 命令未正确结束。”

我不确定 ALTER TABLE 有什么问题。

SELECT trip.TRIP_ID, trip.State, trip.Max_grp_size, trip.type, trip.season, guide.Guide_num, guide.last_name, guide.First_name, guide.address, guide.city, guide.Hire_date, trip_guides.guide_num, reservations.trip_price
FROM trip
JOIN trip_guides ON trip.TRIP_ID = trip_guides.trip_id
JOIN Guide ON trip_guides.guide_num = guide.Guide_num
ALTER TABLE trip ADD (price_trip CHAR)
JOIN reservations ON trip.price_trip = reservations.trip_price
ORDER BY trip.trip_ID;

【问题讨论】:

  • 好吧,这与ALTER TABLE 的使用方式无关...
  • 您能否指导我了解如何正确使用 ALTER TABLE 以及我缺少什么?看了SQL Oracle FAQ,肯定没看懂。
  • 不能在 select 语句中间使用 Alter table。
  • 这完全没有意义......也许你想选择?这将使您的选择与连接并创建一个具有选择的结构和内容的新表。
  • ALTER 用于更改现有表。就像在现有表中添加新列一样。听起来您想运行一个 SELECT 语句,也许是 INSERT INTO 一个新表?您能否详细说明您要做什么,我们可以指导您朝那个方向发展。就目前而言,根本不清楚您要做什么。

标签: sql oracle alter-table


【解决方案1】:

听起来您想要的是“CREATE TABLE ... AS (SELECT...)”类型的语句。本质上是根据 SQL 语句的结果集创建一个 NEW 表。

这看起来像:

CREATE TABLE your_1st_level_normalized_table AS
(
    SELECT trip.TRIP_ID,
        trip.STATE,
        trip.Max_grp_size,
        trip.type,
        trip.season,
        guide.Guide_num,
        guide.last_name,
        guide.First_name,
        guide.address,
        guide.city,
        guide.Hire_date,
        trip_guides.guide_num,
        reservations.trip_price,
        NULL as PRICE_TRIP /*new field in the new table set to NULL*/
    FROM trip
    JOIN trip_guides ON trip.TRIP_ID = trip_guides.trip_id
    JOIN Guide ON trip_guides.guide_num = guide.Guide_num
    JOIN reservations ON trip.price_trip = reservations.trip_price
);

我已删除 ORDER BY,因为此语句中不允许这样做。

【讨论】:

  • 谢谢。但是,在运行您的代码后,我收到错误“ORA-00942:表或视图不存在”。我应该如何解决这个问题?还是这个问题太离题了?
  • trip、trip_guides、guide 和 reservations 表是否存在?你能单独运行那个 SELECT 语句并取回记录吗?
  • 是的。但是,我确实发现我拼错了 'reservations' 意思是 'reservation' 我很抱歉,但在修复时我发现了另外两个错误。一个是“ORA-00957:重复的列名”,另一个是“ORA-00904:“TRIP”。“PRICE_TRIP”:无效标识符”我将如何创建列 PRICE_TRIP?
  • 基本上我们正在做的是编写一个有效的 SELECT 语句,然后将其包装在 CREATE TABLE 语句中以实现事物,所以如果 SELECT 语句没有输出表中想要的内容,你需要修复它。至于您的第一个错误,您在 SELECT 语句中定义了两次字段名称guide_num。只是其中一个别名... trip_guides.guide_num as trip_guides_guide_num, 至于您的新 Price_Trip 列,您如何得出该值?我不知道您的数据,所以我无法建议您如何将其添加到此处。
  • Price_Trip 没有值,我只知道JOIN 用于融合多个表的语句。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-07
  • 2013-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-15
相关资源
最近更新 更多