【问题标题】:Get cell value and use it in an INSERT statement (MS ACCESS)获取单元格值并在 INSERT 语句中使用它 (MS ACCESS)
【发布时间】:2016-03-12 15:05:01
【问题描述】:

我想使用来自不同表的值插入一条记录

只是为了说明:

INSERT INTO tbl1 
VALUES([value1], [value2], NOW())
  • value1 是一个数字,来自不同表格中随机行中的单元格
  • value2 是另一个数字,它来自另一个表中随机行中的单元格

这是我的尝试:

INSERT INTO transactions(itemid, userid, tdate) 
VALUES((SELECT TOP 1 ID FROM items ORDER BY RND(ID)), (SELECT TOP 1 ID FROM users ORDER BY RND(ID)), (NOW()))

但这会引发错误:

查询输入必须至少包含一个表或查询

任何帮助将不胜感激。

谢谢!

【问题讨论】:

  • 这怎么行?如果要插入文本字段,为什么要使用日期/时间函数。
  • @GordonLinoff 我的意思是使用当前日期作为第三个参数。抱歉,示例不一致。我现在会更新问题。
  • 你想要SELECT TOP 1 ID FROM items给你什么?这是否等同于Min(ID)
  • @Rian 寻找您信任的数据库专家。询问他或她在没有ORDER BY 的情况下SELECT TOP 1 是否可靠
  • @Rian 您可能需要一个order by 来保证您返回的ID。这一切看起来都是个坏主意。

标签: sql ms-access


【解决方案1】:

您可以重写您的语句以使用SELECT 而不是VALUES

INSERT INTO  transactions(itemid, userid, tdate) 
    SELECT   TOP 1 items.ID, users.ID, NOW() 
    FROM     items, users
    ORDER BY Rnd(-(1000*items.ID*users.ID)*Time()), 
             items.ID, users.ID

编辑:我添加了ORDER BY 子句,这将导致更多随机排序顺序。负值将确保一种随机化。另见this question

Edit2:扩展 ORDER BY 子句以确保 TOP 1 不必处理关系。

【讨论】:

  • 无法使用联接,因为我从中获取项目 ID 的行与我从中获取用户 ID 的行之间没有直接链接。条件也不是必须的。感谢您的意见
  • 现在测试更新的解决方案。很快就会回复你。谢谢!
  • 这会使用我其他表中的随机用户 ID 和项目 ID 添加记录,这是我想要完成的。唯一的问题是,当我尝试多次执行它时,有时会添加 1 行,有时会添加 2 行,有时会添加 3 行。知道为什么吗?
  • @HansUp 我不明白为什么会有重复和联系(假设其他表具有正确的主键。)
  • @shawnt00 我想我误入歧途了,所以删除了那些 cmets。对不起。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多