【问题标题】:INSERT INTO with VALUES and SELECT STATEMENTINSERT INTO with VALUES 和 SELECT STATEMENT
【发布时间】:2014-07-07 03:39:22
【问题描述】:

需要帮助! 我有 2 张桌子:Employee (Per_Code, Per_Name, Dept_Name) | Task (Dest_ID, Destination, Salary) 作为数据源。 现在我再做一张桌子Employee_Salary (Per_Code, Per_Name, Dept_Name, Dest_ID, Destination, Date, Duration, Salary)。

我的 SQL 语句:

INSERT INTO Employee_Salary (Per_Code, Per_Name, Dept_Name, Dest_ID, Destination, Date, Duration, Salary) 
VALUES (
'1001', 
(SELECT Per_Name FROM Employee WHERE Per_Code=1001), 
(SELECT Dept_Name FROM Employee WHERE Per_Code=1001), 
(SELECT Dest_ID FROM Task WHERE Destination="CityA"), 
'CityA', 
'2014-07-07', 
'3', 
(SELECT Salary FROM Task WHERE Destination="CityA")
);

但它说“查询输入必须包含至少一个表或查询”。难道我的 SQL 语句错了?请帮助我...任何人!

【问题讨论】:

  • 是否有任何内部查询返回 null 值?
  • 只显示错误信息。当我查看表格时,没有插入任何内容。
  • 尝试在查询中使用硬编码值而不是SELECT,并检查它是否有效,然后单独执行内部SELECT 语句以查看其中是否有任何一个返回空值。
  • 在 MS Access 中,日期应包含井号 (#),不应引用数值。根据您的工作地点," 引号很好。您应该使用参数。

标签: sql ms-access


【解决方案1】:

可能是这样的

INSERT INTO Employee_Salary 
       (Per_Code, Per_Name, Dept_Name, Dest_ID, Destination, Date, Duration, Salary) 
SELECT '1001',E.Per_Name,E.Dept_Name,T.Dest_ID,'CityA','2014-07-07','3',T.Salary 
From Employee E CROSS JOIN Task T 
WHERE E.Per_Code=1001 AND T.Destination='CityA'

或者:

INSERT INTO Employee_Salary 
       (Per_Code, Per_Name, Dept_Name, Dest_ID, Destination, Date, Duration, Salary) 
SELECT '1001',E.Per_Name,E.Dept_Name,T.Dest_ID,'CityA','2014-07-07','3',T.Salary 
From Employee E,Task T 
WHERE E.Per_Code=1001 AND T.Destination='CityA'

【讨论】:

  • 我尝试使用您的第二个代码。它正在运行,但没有数据插入。
  • Source和Target的DataType是否匹配??首先通过硬编码尝试,然后逐列值...!
  • 没有插入,因为任务表上的城市值尚不存在。对不起我的坏。非常感谢@Vignesh Kumar
  • 嗨@Vignesh Kumar 请将'CityA'的双引号更改为单引号:)
  • @SHEKHARSHETE 可能是单引号转双引号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-25
  • 2020-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多