列不允许 SQL
Column Not Allowed SQL
Error Code Screenshot(ShipDate 现在是错误)
对于我的学校项目,我们将创建一个产品数据库,客户可以在其中下订单等。我将我的代码与同学进行了比较,除了我的列数较少外,它们基本相同。这部分代码将用户输入插入到 Orders Table.
倒数第二列 OrderStatus,是 * 在控制台中出现的位置。如果它看起来很乱,我提前道歉,由于某种原因,Body 中的格式不会延续到发布帖子。
代码:
INSERT INTO Orders
VALUES (OrderNum,
OrderDate,
CustID,
PNum,
UnitPrice,
QtyOrder,
TotalCost,
ShipDate,
QtyShipped,
OrderStatus,
NULL);
SELECT MaxNum,
SYSDATE,
&vCustID,
'&vPNum',
UnitPrice,
&vQty,
TotalCost,
ShipDate,
QtyShipped,
'Open',
Orders.ReasonNum
FROM CancelledOrder, Orders, Counter
WHERE Orders.ReasonNum = CancelledOrder.ReasonNum;
COMMIT;
订单Table供参考
CREATE TABLE Orders
(
OrderNum NUMBER (4) PRIMARY KEY,
OrderDate DATE,
CustID CHAR (3),
PNum VARCHAR2 (3),
UnitPrice NUMBER,
QtyOrder NUMBER,
TotalCost NUMBER,
ShipDate DATE,
QtyShipped NUMBER,
OrderStatus VARCHAR2 (10),
ReasonNum NUMBER,
CONSTRAINT fk_CustID FOREIGN KEY (CustID) REFERENCES Customer (CustID),
CONSTRAINT fk_PNum FOREIGN KEY (PNum) REFERENCES Product (PNum),
CONSTRAINT fk_ReasonNum FOREIGN KEY
(ReasonNum)
REFERENCES CancelledOrder (ReasonNum)
);
我认为 INSERT
应该与 SELECT
一致,即
insert into ...
select ... from
以你的例子为例:
INSERT INTO Orders (OrderNum, --> no VALUES keyword, but list of columns
OrderDate,
CustID,
PNum,
UnitPrice,
QtyOrder,
TotalCost,
ShipDate,
QtyShipped,
OrderStatus,
reasonnum) --> reasonnum instead of null
SELECT MaxNum,
SYSDATE,
&vCustID,
'&vPNum',
UnitPrice,
&vQty,
TotalCost,
ShipDate,
QtyShipped,
'Open',
Orders.ReasonNum
FROM CancelledOrder, Orders, Counter
WHERE Orders.ReasonNum = CancelledOrder.ReasonNum;
此外,检查 FROM
和 WHERE
子句:有 3 个 table 只涉及一个条件。结果,你会得到比预期更多的行,除非你修复它(或者除非 COUNTER
table 只包含 1 行)。
对于这些示例,假设有两个 tables,a 和 b,每个有 3 列。
插入时,语句必须使用:
方法 A) 这里我们指示数据库插入(到所有或特定列)查询结果。为此,我们编写 INSERT INTO SELECT ..... 例如:
INSERT INTO table_a select table_b.* from table_b --Useful when we know how many columns table a and b have;
或
INSERT INTO table_a select b.column_2, b.column_3, b.column_1 from table_b --Usefull if b had more columns and we want those three, or if the order of the columns of b needs id different from the order of the columns of a
[在这种情况下,table a 的所有列将填充 table b 的行中的相应列,即 select 部分查询 returns]
或:
INSERT INTO table_a (tab_a_column1, tab_a_column3) select b.column_1, b.column_3 from table_b
[在这种情况下,只有 table a 的指定列将填充来自 table b 的列,即查询的 select 部分returns]
-> 请注意,在这些示例中从未使用 VALUES 关键字
方法 B) 在这种情况下,我们指示数据库将具有特定值的单个新行插入 table(到table)。在此方法中,我们根本不使用 select 查询:
INSERT INTO table_a VALUES ( 1, 'asdf', 5658 ) ;
在这个例子中,我们只是给出了一些要插入的值。它们将按照列在 table.
中的顺序放入 table_a 的相应列中
INSERT INTO table_a (tab_a_column1, tab_a_column3) VALUES (1, 5658);
第一列和第三列将插入数字1和5658,而第二列将保留为NULL
所以,当使用 VALUES 时,我们只插入一行。
但是当使用方法 A 时,我们的一条语句可能一次插入任意数量的行。这一切都将取决于查询 SELECT 部分的行数 returns.
注意:方法 A 中查询的 select 部分对其复杂程度没有限制。例如,它可以有多个连接、where 子句、group by ...等等。
可以在此处找到解释 INSERT INTO 的好 link:
https://www.techonthenet.com/sql/insert.php
Error Code Screenshot(ShipDate 现在是错误)
对于我的学校项目,我们将创建一个产品数据库,客户可以在其中下订单等。我将我的代码与同学进行了比较,除了我的列数较少外,它们基本相同。这部分代码将用户输入插入到 Orders Table.
倒数第二列 OrderStatus,是 * 在控制台中出现的位置。如果它看起来很乱,我提前道歉,由于某种原因,Body 中的格式不会延续到发布帖子。
代码:
INSERT INTO Orders
VALUES (OrderNum,
OrderDate,
CustID,
PNum,
UnitPrice,
QtyOrder,
TotalCost,
ShipDate,
QtyShipped,
OrderStatus,
NULL);
SELECT MaxNum,
SYSDATE,
&vCustID,
'&vPNum',
UnitPrice,
&vQty,
TotalCost,
ShipDate,
QtyShipped,
'Open',
Orders.ReasonNum
FROM CancelledOrder, Orders, Counter
WHERE Orders.ReasonNum = CancelledOrder.ReasonNum;
COMMIT;
订单Table供参考
CREATE TABLE Orders
(
OrderNum NUMBER (4) PRIMARY KEY,
OrderDate DATE,
CustID CHAR (3),
PNum VARCHAR2 (3),
UnitPrice NUMBER,
QtyOrder NUMBER,
TotalCost NUMBER,
ShipDate DATE,
QtyShipped NUMBER,
OrderStatus VARCHAR2 (10),
ReasonNum NUMBER,
CONSTRAINT fk_CustID FOREIGN KEY (CustID) REFERENCES Customer (CustID),
CONSTRAINT fk_PNum FOREIGN KEY (PNum) REFERENCES Product (PNum),
CONSTRAINT fk_ReasonNum FOREIGN KEY
(ReasonNum)
REFERENCES CancelledOrder (ReasonNum)
);
我认为 INSERT
应该与 SELECT
一致,即
insert into ...
select ... from
以你的例子为例:
INSERT INTO Orders (OrderNum, --> no VALUES keyword, but list of columns
OrderDate,
CustID,
PNum,
UnitPrice,
QtyOrder,
TotalCost,
ShipDate,
QtyShipped,
OrderStatus,
reasonnum) --> reasonnum instead of null
SELECT MaxNum,
SYSDATE,
&vCustID,
'&vPNum',
UnitPrice,
&vQty,
TotalCost,
ShipDate,
QtyShipped,
'Open',
Orders.ReasonNum
FROM CancelledOrder, Orders, Counter
WHERE Orders.ReasonNum = CancelledOrder.ReasonNum;
此外,检查 FROM
和 WHERE
子句:有 3 个 table 只涉及一个条件。结果,你会得到比预期更多的行,除非你修复它(或者除非 COUNTER
table 只包含 1 行)。
对于这些示例,假设有两个 tables,a 和 b,每个有 3 列。 插入时,语句必须使用:
方法 A) 这里我们指示数据库插入(到所有或特定列)查询结果。为此,我们编写 INSERT INTO SELECT ..... 例如:
INSERT INTO table_a select table_b.* from table_b --Useful when we know how many columns table a and b have;
或
INSERT INTO table_a select b.column_2, b.column_3, b.column_1 from table_b --Usefull if b had more columns and we want those three, or if the order of the columns of b needs id different from the order of the columns of a
[在这种情况下,table a 的所有列将填充 table b 的行中的相应列,即 select 部分查询 returns]
或:
INSERT INTO table_a (tab_a_column1, tab_a_column3) select b.column_1, b.column_3 from table_b
[在这种情况下,只有 table a 的指定列将填充来自 table b 的列,即查询的 select 部分returns]
-> 请注意,在这些示例中从未使用 VALUES 关键字
方法 B) 在这种情况下,我们指示数据库将具有特定值的单个新行插入 table(到table)。在此方法中,我们根本不使用 select 查询:
INSERT INTO table_a VALUES ( 1, 'asdf', 5658 ) ;
在这个例子中,我们只是给出了一些要插入的值。它们将按照列在 table.
中的顺序放入 table_a 的相应列中INSERT INTO table_a (tab_a_column1, tab_a_column3) VALUES (1, 5658);
第一列和第三列将插入数字1和5658,而第二列将保留为NULL
所以,当使用 VALUES 时,我们只插入一行。 但是当使用方法 A 时,我们的一条语句可能一次插入任意数量的行。这一切都将取决于查询 SELECT 部分的行数 returns.
注意:方法 A 中查询的 select 部分对其复杂程度没有限制。例如,它可以有多个连接、where 子句、group by ...等等。
可以在此处找到解释 INSERT INTO 的好 link: https://www.techonthenet.com/sql/insert.php