【问题标题】:How to get a key from another table in a insert into... Values SQL statement?如何在插入... Values SQL 语句中从另一个表中获取键?
【发布时间】:2021-07-29 22:01:16
【问题描述】:

我在 SQL 语句方面不是很有经验,我正在尝试结合几个语句来减少到数据库的流量。(并确保中间不会发生其他操作)...

我有两张桌子:

表:R_LOTS
a.o. 2 列:PK_R_LOT 和 LOTCODE

表:R_LOTTRACKING
列:FK_R_LOT、TIMESTAMP、FK_MAGLOCATIES

我用的语句:

INSERT INTO R_LOTTRACKING (FK_R_LOT,TIMESTAMP,FK_MAGLOCATIES) VALUES (?,CURRENT_TIMESTAMP,?). 

我可以在问号上填写要发送的值。

但是,您可以想象,我没有 FK_R_LOT,但我有(R_LOT 的)LOTCODE。当然,我可以通过单独的SELECT PK_R_LOT FROM R_LOT WHERE LOTCODE=?; 获得 FK_R_LOT,但是有没有办法将这些语句结合起来?

我看过一些示例,但所有信息似乎都来自 R_LOT 表,但我找不到 VALUES 和 SELECT 的组合。

总结:

我知道:LOTCODE 和 FK_MAGLOCATIES

如何组合语句插入行:

INSERT INTO R_LOTTRACKING (FK_R_LOT,TIMESTAMP,FK_MAGLOCATIES) VALUES (?,CURRENT_TIMESTAMP,?)

SELECT PK_R_LOT FROM R_LOT WHERE LOTCODE=?

【问题讨论】:

  • 请标记您真正使用的RDBMS,并且仅请标记该RDBMS。
  • 如果您正在使用 SQL Server,则将 CURRENT_TIMESTAMP 的值插入您的 TIMESTAMP 列没有任何意义; timestamp 是 rowversion 的(已弃用)同义词,是 binary 值,不是日期和时间值。
  • @Larnu,对不起。我在这里有点新。我的标签首先被拒绝...我正在使用 MSSQL 服务器。 CURRENT_TIMESTAMP 给了我数据库中的当前日期和时间。我仍然可以更改此列的名称,但使用它是否存在真正的问题?
  • 那么,就像我提到的,上面的似乎是错误的。您不能将值插入timestamp 列; SQL Server 控制rowversion 的值。
  • 如有必要,我将修复时间戳列,但它正在工作。但是,如果更好,我会改变它..

标签: sql select insert


【解决方案1】:

使用子查询:

INSERT INTO R_LOTTRACKING ( FK_R_LOT, ... )
VALUES ( (SELECT PK_R_LOT FROM R_LOT WHERE LOTCODE = ?), ... );

或使用插入选择:

INSERT INTO R_LOTTRACKING ( FK_R_LOT, ... )
SELECT PK_R_LOT, ... FROM R_LOT WHERE LOTCODE = ?;

【讨论】:

  • 哇,这似乎合乎逻辑。要去测试。万分感谢。我还有一个关于将这个 insert Into 语句与另一个表中的另一个 UPDATE 语句结合起来的问题。我必须为此提出一个新问题还是我使用这个问题?
  • 提出另一个请求。 INSERT 加上 UPDATE 可以用 MERGE (docs.microsoft.com/de-de/sql/t-sql/statements/…) 完成。也许这已经有帮助了?
  • 我已经看到了,但我也没有设法将其转化为我的情况。测试完以上,我先试着理解一下merge,不然就贴在这里了。谢谢!
  • 好的。至于你原来的问题:我添加了一个同样好的替代方案:-)
  • 您好 Thorsten,我不明白如何在第二个语句中包含我的价值观。当然,我可以在 WHERE 语句中包含 lotcode,但是如何在 FK_MAGLOCATIES 中包含问号?第一种方法效果很好......但是,了解如何使用第二种 cna 来做到这一点也很有趣......
猜你喜欢
  • 2015-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多